我需要一些关于如何在R中开始实现问题的帮助。我有一个数据框,其中的行按变量' id'进行分组。对于每个人的身份#39;我想只保留一排。但是,我有许多标准可以指定要删除的行。
这些是我的一些标准:
如果这样可以更清楚,我还可以提供数据集。但是,我最重要的问题是我不知道如何根据有序数量的条件实现删除行的逻辑。 如果有人能告诉我如何实现这样的代码,那就太好了。
谢谢!
这将是一个示例数据集:
df <- data.frame(id = c(1,1,1,2,2,2,3,3,3),
text=c("asd",NA,"asd",NA,NA,NA,NA,NA,NA),
check = c(T,F,T,T,T,F,F,F,F),
newtext =
c("as","as","as","das","das","None","qwe","qwe2","None"),
othervars = c(1,2,3,45,5,6,6,7,1))
作为输出,我想保留以下行: 第1行或第3行 第4行或第5行 第7行或第8行 应该保留其他列的列,以及稍后我需要这些信息。
希望这会让它更清晰。
答案 0 :(得分:0)
好吧,我有东西。我正在使用filter()
中的dplyr
到未知NA
的子集,因为我使用subset()
或基本df[,]
子集来遇到问题{{1 }}
数据:
R
启动新的空数据框:
df <- data.frame(id = c(1,1,1,2,2,2,3,3,3),
text=c("asd",NA,"asd",NA,NA,NA,NA,NA,NA),
check = c(T,F,T,T,T,F,F,F,F),
newtext =
c("as","as","as","das","das","None","qwe","qwe2","None"),
othervars = c(1,2,3,45,5,6,6,7,1))
循环到每df2 <- df[0,]
个样本行:
id
输出示例:
library(dplyr)
for(i in unique(df$id)){
temp <- filter(df, id == i)
if(nrow(filter(temp, !is.na(text))) > 0){
temp <- filter(temp, !is.na(text))
df2[i, ] <- temp[sample(nrow(temp), size = 1), ]
}else if(nrow(filter(temp, check)) > 0){
temp <- filter(temp, check)
df2[i, ] <- temp[sample(nrow(temp), size = 1), ]
}else{
temp <- filter(temp, !(grepl("None",temp$newtext)))
df2[i, ] <- temp[sample(nrow(temp), size = 1), ]
}
}
问候。
编辑:忽略左侧的行号,它们是循环中不同子集的残差。