【问题标题】:Select rows based on value in multiple columns defined by vector根据向量定义的多列中的值选择行
【发布时间】:2014-04-03 13:45:10
【问题描述】:

我有以下数据框

df <- data.frame(A1 = c("A","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","B"), 
             B2 = c("C","D","C","D","C","D","C","D","C","D","C","D","C","D","C","D","C","D","C","D"), 
             C3 = c("E","F","E","F","E","F","E","F","E","F","E","F","E","F","E","F","E","F","E","F"),
             D4=c(1,12,5,41,45,4,5,6,12,7,3,4,6,8,12,4,12,1,6,7))

我想对前 3 列与向量 c("A","C","E") 匹配的所有行进行子集化

我尝试过使用,但它不起作用

vct <- c("A","C","E")
df[which(df[1:3] == vct)]

【问题讨论】:

  • 看看?%in%

标签: r subset


【解决方案1】:

你或许可以使用paste(或interaction):

vct <- c("A","C","E")
do.call(paste, df[1:3]) %in% paste(vct, collapse = " ")
#  [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE
# [12] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
df[do.call(paste, df[1:3]) %in% paste(c("A", "C", "E"), collapse = " "), ]
#   A1 B2 C3 D4
# 1  A  C  E  1
# 3  A  C  E  5
# 5  A  C  E 45
# 7  A  C  E  5
# 9  A  C  E 12

## with "interaction"
df[interaction(df[1:3], drop=TRUE) %in% paste(vct, collapse = "."), ]

你也可以这样做:

df[with(df, A1 == "A" & B2 == "C" & C3 == "E"), ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多