英文:
Is there an R function to mutate a dataframe and create a new dataframe based on the following conditions?
问题
我有一个类似以下的数据框:
1. 2. 3. 4. 5.
R1 NA 881. NA NA NA
R2 650 NA NA NA NA
R3 743 NA NA NA NA
dput
:
structure(list(V1 = c(NA, 650L, 743L), V2 = c(881L, NA, NA), V3 = c(NA, NA, NA), V4 = c(NA, NA, NA), V5 = c(NA, NA, NA)), row.names = c(NA, -3L), class = "data.frame")
英文:
I have a dataframe similar to the following:
1. 2. 3. 4. 5.
R1 NA 881. 950 981. 1000
R2 650 760. 890. NA. NA
R3 743 834. 960. 1001. 1115
I want to mutate the dataframe and create a new dataframe that keeps only the minimum value of each row, all my unwanted values would return as NA, for an output of something like this:
1. 2. 3. 4. 5.
R1 NA 881 NA NA NA
R2 650 NA NA NA NA
R3 743 NA NA NA NA
dput
:
structure(list(V1 = c(NA, 650L, 743L), V2 = c(881L, 760L, 834L
), V3 = c(950L, 890L, 960L), V4 = c(981L, NA, 1001L), V5 = c(1000L,
NA, 1115L)), row.names = c(NA, -3L), class = "data.frame")
答案1
得分: 1
在基础R中的解决方案:
t(apply(your_data, 1, \(v) { is.na(v) <- -which.min(v); return(v) }))
这使用了is.na<-
赋值,根据索引设置NA值。-which.max(v)
除了第一个最小值之外的所有值。
结果:
V1 V2 V3 V4 V5
[1,] NA 881 NA NA NA
[2,] 650 NA NA NA NA
[3,] 743 NA NA NA NA
英文:
A solution in base R:
t(apply(your_data, 1, \(v) { is.na(v) <- -which.min(v); return(v) }))
This uses the is.na<-
assigment, which sets NA values based on index. -which.max(v)
everthing except the first minimum value.
Gives:
> V1 V2 V3 V4 V5
> [1,] NA 881 NA NA NA
> [2,] 650 NA NA NA NA
> [3,] 743 NA NA NA NA
答案2
得分: 1
df* NA^(col(df) != max.col(-replace(df, is.na(df), Inf)))
X1 NA 881 NA NA NA
X2 650 NA NA NA NA
X3 743 NA NA NA NA
t(apply(df, 1, (x) ifelse(x == min(x, na.rm = TRUE), x, NA)))
X1 NA 881 NA NA NA
X2 650 NA NA NA NA
X3 743 NA NA NA NA
英文:
df* NA^(col(df) != max.col(-replace(df, is.na(df), Inf)))
X1 X2 X3 X4 X5
R1 NA 881 NA NA NA
R2 650 NA NA NA NA
R3 743 NA NA NA NA
t(apply(df, 1, \(x) ifelse(x == min(x, na.rm = TRUE), x, NA)))
X1 X2 X3 X4 X5
R1 NA 881 NA NA NA
R2 650 NA NA NA NA
R3 743 NA NA NA NA
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论