基于因子(字符串)从R数据框中提取行

7

抱歉如果这是一个重复的问题,但我似乎无法在SO上找到其他任何信息,尽管它看起来像是一个简单的问题。我有一个数据框,其中有几列因子。其中一些是整数,一些是字符串。我想提取与特定因子对应的行。例如,

my_data <- read.table(file = "my_data.txt", header = TRUE)
my_data[ my_data$age == 20, ]

这个可以实现,但如果我尝试...
my_data[ my_data$gender == "male", ]

这没有任何匹配结果。我意识到它们不是同一件事,因为检查my_data$name[1]的类别是因子,而我正在将其与字符串进行比较。
你有什么想法我在这里做错了吗?
数据示例:
大小 年龄 性别 价值 1 20 男性 0.5 4 22 女性 0.7 3 14 女性 0.3

3
我们是否可以假设您已经尝试使用正确的 [row, col] 提取形式,例如 my_data[my_data$gender == "male", ] - A5C1D2H2I1M1N2O1R2T1
你能否给我们提供一份数据样本(例如,dput(head(my_data)))? - matt_k
是的,我使用了 [row, col] 的格式……现在我意识到了我的错误……我应该这样做 my_data[ my_data$gender == " male ", ] 你看出区别了吗?真的很尴尬。 - Samuel Tan
2个回答

11

尝试使用 subset 函数。

这个网站提供了很好的参考资料: HowtoInR

my_data = subset(my_data, gender == "male")

感谢您的回复。然而,它给出了相同的输出。 - Samuel Tan
你能提供一份数据样本吗? - LearnR
谢谢,找到问题了,请看我上面的评论。对于造成的麻烦我很抱歉。我知道我做错了什么。 - Samuel Tan
这适用于布尔比较,例如 data$x => data$y。 - Mohammed

4

这是对一个旧问题的回答,但我想分享一下我当前的做事方式,以便出现这样的错误更少。

答案是使用 data.table 包。它为我节省了数百行代码,并将继续这样做。子集变得非常简单:

my_data <- data.table(my_data)
my_data[gender == "male" & age <= 20]

我可以使用尽可能多的条件语句,并且还可以使用.SD将列作为参数传递给函数,如下所示:

my_data[gender == "male" & age <= 20, lapply(.SD, mean), by = c("nationality", "height")]

从现有列创建列要简单得多,甚至可以一次性创建多个列


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