我有一个采用这种格式的数据框:
df<-data.frame(A=(c(4,1,5,4)), B=(c(4,2,4,5)), C=(c(7, 2, 3,5)), D=(c("Group 1", "Group 2", "Group 1", "Group 2")))
我想编写一个搜索数据帧每一行的函数,如果它找到一个值为&lt; = 3且组1分配的函数,则添加第五列,字符串为“Success”;如果在任何具有Group 1赋值的行中找不到值&lt; = 3,则会添加第五列,其字符串为“Fail”。
然后我需要在具有36列和1000行的类似格式的数据帧上部署此函数。
答案 0 :(得分:0)
如果您只想忽略“第2组”行,那么
df$Result<-ifelse(df$D=="Group 1",
ifelse(rowSums(df[,1:3]<=3)>0, "Success", "Fail"),
NA)
df
将返回
A B C D Result
1 4 4 7 Group 1 Fail
2 1 2 2 Group 2 <NA>
3 5 4 3 Group 1 Success
4 4 5 5 Group 2 <NA>
答案 1 :(得分:0)
这里有一个循环解决方案:
for(r in 1:nrow(df)){
if (any(df[r, 1:3]<=3) & df[r,4] == 'Group 1') df [r, "E"] <- "Success"
if (all(df[r, 1:3]>3) & df[r,4] == 'Group 1') df [r, "E"] <- "Fail"
}
你可以放置更多条件,例如第2组