【问题标题】:Creating a data frame from a data set with values over (certain point) [duplicate]从具有超过(某些点)的值的数据集中创建数据框[重复]
【发布时间】:2020-10-07 16:12:48
【问题描述】:

所以我有一个包中的数据集,我想创建一个新的数据框,其中一列中只有犯罪率高于 30% 的城市。

数据集有一列犯罪,其中包含城市的犯罪率。这些值是十进制形式。

df2 <- Cities[,"Crime" > .30]

但它不仅会返回犯罪率高于 0.30 的城市,还会返回所有城市。我不确定为什么会这样,因为我在代码中指定了 > 0.30?我只是花了一些时间四处寻找有关子集和创建数据框的帮助,但它们都对此类问题没有帮助,它们只是您选择整个列的一般子集。

我觉得我已经很接近了,我尝试了其他事情,但我感到很沮丧。

【问题讨论】:

  • 这能回答你的问题吗? Filter data.frame rows by a logical condition
  • df2 &lt;- Cities["Crime" &gt; .30] 会起作用。括号中的逗号使其成为返回真/假的逻辑运算。没有逗号,它会以你想要的方式减少 df
  • 嗯。我去掉了逗号,它仍然给了我整个数据集。

标签: r dataframe subset


【解决方案1】:

您必须正确索引,在您的代码中您尝试在列级别进行索引。如果要过滤,则必须在行级别进行索引,这是, 的左侧括号中。举个例子:

set.seed(123)
#Data
Cities <- data.frame(Crime=runif(100,0,1))
#Filter
df2 <- Cities[Cities$Crime > .30,,drop=F]

数据框中的行:

#Original
nrow(Cities)
 [1] 100
#Filtered
nrow(df2)
 [1] 65

或者使用dplyr:

library(dplyr)
#Code
df2 <- Cities %>% filter(Crime > .30)

或者base Rsubset():

#Code 2
df2 <- subset(Cities,Crime > .30)

【讨论】:

  • 啊,非常感谢!我知道这将是一件非常小的事情。不过,请问过滤代码中 drop=F 的作用是什么?
  • @zinger001 是的,当您的数据框中只有一列时使用该选项,以便在过滤时保留数据框结构。希望对您有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多