R 基于另一数据帧的内容对数据帧进行子集设置
我有两个数据帧。例如,假设它们看起来像这样:R 基于另一数据帧的内容对数据帧进行子集设置,r,dataframe,R,Dataframe,我有两个数据帧。例如,假设它们看起来像这样: df1 <- data.frame(x=rep(letters[1:26], 16)) df2 <- data.frame(y=letters[1:4]) 但这告诉我,我需要大小相同的数据帧。想法 可以使用%中的%和match()进行此操作。这是前者: > which( df1$x %in% df2$y ) [1] 1 2 3 4 27 28 29 30 53 54 55 56 79 80
df1 <- data.frame(x=rep(letters[1:26], 16))
df2 <- data.frame(y=letters[1:4])
但这告诉我,我需要大小相同的数据帧。想法 可以使用%中的
%和match()
进行此操作。这是前者:
> which( df1$x %in% df2$y )
[1] 1 2 3 4 27 28 29 30 53 54 55 56 79 80 81 82 105
[18] 106 107 108 131 132 133 134 157 158 159 160 183 184 185 186 209 210
[35] 211 212 235 236 237 238 261 262 263 264 287 288 289 290 313 314 315
[52] 316 339 340 341 342 365 366 367 368 391 392 393 394
>
>
> table(df1[ which( df1$x %in% df2$y ), "x"])
a b c d e f g h i j k l m n o p q r s t u v w x y
16 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z
0
>
您可以删除,因为您可以直接使用布尔向量进行索引,所以df1[df1$x%in%df2$y,“x”]
更短。我喜欢which()?
> which( df1$x %in% df2$y )
[1] 1 2 3 4 27 28 29 30 53 54 55 56 79 80 81 82 105
[18] 106 107 108 131 132 133 134 157 158 159 160 183 184 185 186 209 210
[35] 211 212 235 236 237 238 261 262 263 264 287 288 289 290 313 314 315
[52] 316 339 340 341 342 365 366 367 368 391 392 393 394
>
>
> table(df1[ which( df1$x %in% df2$y ), "x"])
a b c d e f g h i j k l m n o p q r s t u v w x y
16 16 16 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
z
0
>