【问题标题】:Extract rows from R data frame based on factors (strings)根据因子(字符串)从 R 数据框中提取行
【发布时间】:2014-03-10 02:51:24
【问题描述】:

对不起,如果这是重复的,但我似乎无法在 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

【问题讨论】:

  • 我们是否应该假设您尝试使用正确的[row, col] 提取形式,如my_data[my_data$gender == "male", ]
  • 您能否给我们一个数据样本(例如 dput(head(my_data)))?
  • 是的,我使用了[row, col] 格式....我现在意识到我的错误....我应该这样做my_data[ my_data$gender == " male ", ] 你看到区别了吗?真的很尴尬。

标签: r dataframe


【解决方案1】:

尝试使用subset 函数。

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

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

【讨论】:

  • 感谢您的回复。但是,它给出了相同的输出。
  • 能否提供您的数据样本?
  • 谢谢你,找到问题了,看我上面的评论。抱歉给您添麻烦了。我知道我做错了什么。
  • 这甚至适用于布尔比较,例如数据$x => 数据$y。
【解决方案2】:

这是对一个老问题的回答,但我想分享一下我目前的做事方式,这样的错误发生率要低得多。

答案是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")]

从现有列创建列要简单得多,甚至 creating multiple columns at once

【讨论】:

    猜你喜欢
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多