【问题标题】:R:Subsetting data frame by factorR:按因子子集数据帧
【发布时间】:2018-03-28 19:07:25
【问题描述】:

假设我们有以下数据框

foo
  k h=1 h=2 h=3
1 3   3   6   9
2 2   2   5   8
3 1   1   4   7

str(check)
'data.frame':   3 obs. of  4 variables:
 $ k  : Factor w/ 3 levels "3","2","1": 1 2 3
 $ h=1: int  3 2 1
 $ h=2: int  6 5 4
 $ h=3: int  9 8 7

如何根据k 的因子对我的数据框进行子集化?例如,仅获取 k=3 的行或所有行 ksubet(foo, k=3),但它不起作用。我还尝试将列 k 转换为数字,但是我的 data.frame 失去了它的顺序。重要的是数据是关于 k 的降序排列(所以 3、2、1)

【问题讨论】:

  • k 是一个因子(分类变量),但不是有序因子(序数变量),因此不等式毫无意义。也许使用 k = ordered(3:1, levels=1:3) 或类似的代替。然后k == "3"; k < "3" 有意义。

标签: r dataframe subset


【解决方案1】:

括号表示法应该能够毫无问题地对因子进行子集化:

# Returns all rows of foo where k == '3'
foo[foo$k == '3',]

你之前所做的两个可能的问题:

1) subset(foo, k=3) 应该是subset(foo, k==3),不要将相等运算符 (==) 与赋值运算符 (=) 混淆

2) 由于您要与因子的实际水平进行比较,因此您应该使用字符 '3' 而不是数字 3 检查是否相等。您可以在 str() 的输出中看到 k 的级别是 "3","2","1",带引号,而其他变量的整数显示为不带引号 3 2 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多