【问题标题】:Subset data frame by string按字符串子集数据帧
【发布时间】:2012-08-15 20:12:36
【问题描述】:

假设我有一个包含 7 个变量的数据框。我想根据一列的内容自动对数据框进行子集化。该列是部门,有 17 个不同的值。我希望 R 查看“部门”列并为每个包含所有其他行的部门创建一个新数据框。这相当于 Minitab 中的“拆分工作表”。现在,我必须运行 17 次子集命令来为每个命令创建一个数据框。 R 可以根据列内容自动执行此操作吗?

最好的,谢谢!

【问题讨论】:

  • 是的,这可以解决问题,但它会输出到控制台,而不是将每个部门的数据放在自己的数据框中(最好按部门命名)
  • 它创建了一个data.frames 列表,您可以随意分配。 R 几乎从不改变你下面的数据,而是操纵它并返回它。默认返回是标准输出,但您可以使用<-= 分配给新变量。
  • @BobWainscott:通常最好将它们放在一个列表中,特别是如果您要对每个 data.frame 执行类似的分析。否则你可能会发现自己又回到了需要运行另一个命令 17 次的情况......
  • 非常感谢,数据现在已拆分。我在分析它时有点粗略,没有将它作为数据框放在我面前。我正在使用 RStudio。很棒的网站!干杯。实际上我可以通过 dep1 = out$dep1 将它们输入数据框

标签: r dataframe subset


【解决方案1】:
out<-split(df,df$Dept)

out[[1]]

# 等访问数据帧

out$Dept1

举个具体的例子

df<-data.frame(Dept=c('a','a','b','b','c','d','d'),acs=c(111,112,222,223,333,444,445))
out<-split(df,df$Dept)
out
> out
$a
  Dept acs
1    a 111
2    a 112

$b
  Dept acs
3    b 222
4    b 223

$c
  Dept acs
5    c 333

$d
  Dept acs
6    d 444
7    d 445

dept.names<-names(out)

> dept.names[1]
[1] "a"

> out[[dept.names[1]]] # dataframe for department 1
  Dept acs
1    a 111
2    a 112

> out[[dept.names[2]]] # dataframe for department 2
  Dept acs
3    b 222
4    b 223


> is.data.frame(out[[dept.names[2]]])
[1] TRUE

【讨论】:

    猜你喜欢
    • 2016-04-30
    • 2021-12-01
    • 1970-01-01
    • 2021-02-16
    • 2019-09-02
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 2017-08-23
    相关资源
    最近更新 更多