对于示例数据框架:
df1 <- structure(list(id = structure(1:5, .Label = c("a", "b", "c",
"d", "e"), class = "factor"), cat = c(5L, 7L, 6L, 2L, 8L), dog = c(7L,
NA, 6L, 13L, 2L), sheep = c(NA, 6L, 3L, 6L, 2L), cow = c(2L,
10L, 8L, 9L, 1L), rabbit = c(5L, 3L, NA, 2L, 4L), pig = c(7L,
NA, 12L, 5L, NA)), .Names = c("id", "cat", "dog", "sheep", "cow",
"rabbit", "pig"), class = "data.frame", row.names = c(NA, -5L
))
我想添加一个额外的列'complete。farm’来识别哪些行在"羊"、"牛"one_answers"猪"列中有值。任何在一个或中有NAs的行这些列中有更多的列应该得到0,有实际值的行应该得到1。
如果有人能给我一些建议,我将非常感激。我通常使用完整的案例来子集我的数据框架,但这一次,我只想在列中添加这些信息。
这似乎可以工作:
> df1$complete.farm <- ifelse( !is.na(df1$pig) & !is.na(df1$sheep) & !is.na(df1$cow), 1,0)
> df1
id cat dog sheep cow rabbit pig complete.farm
1 a 5 7 NA 2 5 7 0
2 b 7 NA 6 10 3 NA 0
3 c 6 6 3 8 NA 12 1
4 d 2 13 6 9 2 5 1
5 e 8 2 2 1 4 NA 0
ifelse
是矢量化的,所以你只提到第一个参数的条件,1是确认的,0是未确认的。
另一种(更简单的)方式是@thelatemail下面的评论:
df1$col <- as.numeric(complete.cases(df1[c("sheep","cow","pig")]))
> df1
id cat dog sheep cow rabbit pig complete.farm col
1 a 5 7 NA 2 5 7 0 0
2 b 7 NA 6 10 3 NA 0 0
3 c 6 6 3 8 NA 12 1 1
4 d 2 13 6 9 2 5 1 1
5 e 8 2 2 1 4 NA 0 0