Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 哪些组包含值更优雅的代码?_R - Fatal编程技术网

R 哪些组包含值更优雅的代码?

R 哪些组包含值更优雅的代码?,r,R,如果一个组的一个成员包含一个特定的值,我试图找到一种更优雅的方法来提取数据帧的所有行。例如: id <- c(1,1,2,2,2,3,4,4,5,5) cat <- c("A", "B", "A", "B", "C", "B", "C", "D", "A", "E") mydf <- data.frame(id, cat) id cat 1 A 1 B 2 A 2 B 2 C 3 B 4 C 4 D 5 A 5 E id试试看 或者,

如果一个组的一个成员包含一个特定的值,我试图找到一种更优雅的方法来提取数据帧的所有行。例如:

id <- c(1,1,2,2,2,3,4,4,5,5)
cat <- c("A", "B", "A", "B", "C", "B", "C", "D", "A", "E")
mydf <- data.frame(id, cat)

id cat
1   A
1   B
2   A
2   B
2   C
3   B
4   C
4   D
5   A
5   E
id试试看

或者,如果需要删除所选组中带有“C”的行,请使用
&cat!='C'

mydf%>% 
   group_by(id) %>% 
   filter( any(cat=='C')& cat!='C')
#  id cat
#1  2   A
#2  2   B
#3  4   D
或使用
data.table

library(data.table)
setDT(mydf)[,.SD[any(cat=='C') & cat!='C'] , id]
#   id cat
#1:  2   A
#2:  2   B
#3:  4   D
试一试

或者,如果需要删除所选组中带有“C”的行,请使用
&cat!='C'

mydf%>% 
   group_by(id) %>% 
   filter( any(cat=='C')& cat!='C')
#  id cat
#1  2   A
#2  2   B
#3  4   D
或使用
data.table

library(data.table)
setDT(mydf)[,.SD[any(cat=='C') & cat!='C'] , id]
#   id cat
#1:  2   A
#2:  2   B
#3:  4   D
像这样的

subset(mydf, id %in% id[cat=="C"])
##   id cat
## 3  2   A
## 4  2   B
## 5  2   C
## 7  4   C
## 8  4   D
或用于非交互式使用

mydf[mydf$id %in% mydf$id[mydf$cat == "C"],]
像这样的

subset(mydf, id %in% id[cat=="C"])
##   id cat
## 3  2   A
## 4  2   B
## 5  2   C
## 7  4   C
## 8  4   D
或用于非交互式使用

mydf[mydf$id %in% mydf$id[mydf$cat == "C"],]