如何使用字符型字符串按列对数据框进行子集化

4

I have a data frame in R like this:

> df <- data.frame(cbind(C.01=1, C.02=1:8, C.03=c("A","B","C","D","E","F","G","H")))

我希望获得像这样的一个子集:

> subset(df, C.03 == "A")

C.01 C.02 C.03
1    1    1    A

有没有可能使用xx <- "C.03"中的列名来做相同的子集操作呢?

因为subset(df, xx == "A")不能起作用。

谢谢。


4
可以使用 df[df[xx] == "A", ] 进行筛选。 - David Arenburg
2
避免使用 subset,而是使用标准的 [[[ 运算符,就像 @DavidArenburg 建议的那样。此外,df[df[[xx]]=="A",] 在这种情况下也适用。 - nicola
可能是一个重复的问题,与如何根据字段涉及的条件提取数据框的子集?相似。 - rmuc8
请记得将字符串用引号括起来 ".."。以下是有关编程的内容:http://stackoverflow.com/questions/29540658/r-how-to-make-a-subtable/29541508#29541508 - rmuc8
1
我强烈建议使用David或Nicola的解决方案,但如果你真的想使用subset,你可以尝试subset(df,eval(parse(text=paste0(xx,"==","\"A\""))))。然而,这种hacky代码最终消除了subset更好的可读性的主要优势。使用subset也可能导致意外的行为(例如,参见https://dev59.com/52kw5IYBdhLWcg3wfKhB)。 - cryo111
1个回答

3
使用基本的R语言(感谢@David Arenburg):
df[df[xx] == "A", ]

或者使用dplyr,我建议使用它是因为其语法更易于理解:

require("dplyr")
df <- filter(df, C.03 == "A")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接