基于字符串值的子集数据

时间:2021-02-25 10:49:03

标签: r dataframe

我想根据 index 列对我的数据框进行子集化;我想保留那些索引保存在 myvar 中的案例(例如 110、111)。我不明白为什么我在运行此代码时收到 0 个观察结果:

newdata <- df[ which(df$index=="myvars"), ]

示例数据:

df<-structure(list(index = c(111, 110, 101, 111), et = c(1, 1, 1, 
1), d1_t2 = c(0, 1, 1, 1), d1_t3 = c(0, 0, 1, 1), d1_t4 = c(0, 
1, 0, 1), d2_t1 = c(0, 0, 1, 1), d2_t2 = c(0, 1, 1, 1), d2_t3 = c(0, 
0, 0, 1), d2_t4 = c(1, 0, 1, 1), d3_t1 = c(1, 0, 1, 1), d3_t2 = c(1, 
1, 0, 1), d3_t3 = c(1, 0, 1, 1), d3_t4 = c(1, 1, 0, 1), d4_t1 = c(0, 
0, 1, 1), d4_t2 = c(1, 1, 0, 1), d4_t3 = c(0, 0, 1, 1), d4_t4 = c(1, 
0, 1, 1), d5_t1 = c(1, 0, 0, 1), d5_t2 = c(0, 1, 1, 1), d5_t3 = c(1, 
0, 1, 1), d5_t4 = c(0, 0, 1, 1), d6_t1 = c(1, 0, 0, 1), d6_t2 = c(0, 
0, 1, 1), d6_t3 = c(1, 0, 1, 1), d6_t4 = c(1, 0, 1, 1), d7_t1 = c(1, 
1, 1, 1), d7_t2 = c(1, 1, 1, 1), d7_t3 = c(1, 0, 1, 1), d7_t4 = c(1, 
0, 1, 1)), row.names = c(NA, 4L), class = "data.frame")

代码:

myvars<-c("110", "111")

2 个答案:

答案 0 :(得分:1)

试试

myvars<-c(110, 111)  # <-- !! no quotes !!
df[ which(df$index %in% myvars ), ] #also, no quotes round myvars

答案 1 :(得分:1)

您尝试执行的操作存在几个基本问​​题。

  1. 您没有使用变量“myvars”——您使用的是值为“myvars”的字符串。您的所有行都没有索引“myvars”。
  2. 您使用的 == 只适用于一个值(例如 values==4),但 myvars 中有多个值。相反,您可以使用 df$index %in% myvars
  3. 这确实有效,但您有整数索引,并且正在使用字符串访问它们。这是不必要的,并且可能会导致其他地方出现问题。
  4. 您可能会因为非常庞大且复杂的示例数据而感到困惑。您只需要测试一列——而不是二十列。