【发布时间】:2021-09-29 15:28:20
【问题描述】:
我有一个 df:
A <- c("a", "b", "c", "d", "e", "f", "g", "NA", "h", "I")
B <- c(NA, 2, 3, 4, NA, NA, 5, 6, 8, NA)
C <- c(NA, 9, 8, 4, 5, 7, 5, 6, NA, NA)
D <- c(NA, 1, 2, 3, NA, 5, NA, 7, 8, NA)
E <- c(1,2,3,4,5,6,7,8,9,10)
df <- data.frame(A, B, C, D, E)
1)。我想确定 B、C、D 列中数值(非 NA 值)的位置,然后根据非 NA 的索引创建一个新的数据框。
我当前的代码是:
s <- sapply(!is.na(df$B), which)
这可以给我一个值列表,表示非 NA 值仅适用于其中一列。但我需要索引 3 列
s <- sapply(!is.na(df$B, df$C, df$D), 2, which)
这段代码给了我错误 is.na(df$B, df$C, df$D) 的错误: 3 个参数传递给“is.na”,需要 1 个
我对这个 df 进行索引的预期输出是:
V1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
任何帮助生成代码以获得此输出将不胜感激!
2)。然后我想根据生成上述索引进行子集化,我的预期输出 df2 将是:
A <- c("b", "c", "d", "e", "f", "g", NA, "h")
B <- c(2,3,4,NA, NA, 5,6, 8)
C <- c(9, 8, 4, 5, 7, 5, 6, NA)
D <- c(1,2,3,NA, 5, NA, 7, 8)
E <- c(2,3,4,5,6,7,8,9)
df2 <- data.frame(A, B, C, D, E)
任何帮助生成代码以获得第二个输出将不胜感激,因为我什至不知道从哪里开始编写这段代码。
提前感谢您的帮助!
【问题讨论】:
标签: r