【问题标题】:How to convert the result of xtabs() into dataframe in R? [duplicate]如何将 xtabs() 的结果转换为 R 中的数据框? [复制]
【发布时间】:2019-06-16 20:01:28
【问题描述】:

我有数据框 df_a 之类的数据,并希望将其转换为数据框 df_b 中的格式。

xtabs() 给出了类似的结果,但我没有找到访问元素的方法,如下面的示例代码所示。通过 xa[1,1] 访问没有任何优势,因为数字索引(“1”)和名称(“A”)索引之间的相关性较弱。如您所见,xtabs() 结果存在排序差异,因此 xa[2,2]=2 而不是 df_b 列表中的 0。

    > df_a
      ItemName Feature Amount
    1    First       A      2
    2    First       B      3
    3    First       A      4
    4   Second       C      3
    5   Second       C      2
    6    Third       D      1
    7   Fourth       B      2
    8   Fourth       D      3
    9   Fourth       D      2
    > df_b
      ItemName A B C D
    1    First 6 3 0 0
    2   Second 0 0 5 0
    3    Third 0 0 0 1
    4   Fourth 0 2 0 5
    > df_b$A
    [1] 6 0 0 0

    > xa<-xtabs(df_a$Amount~df_a$ItemName+df_a$Feature)
    > xa
                 df_a$Feature
    df_a$ItemName A B C D
           First  6 3 0 0
           Fourth 0 2 0 5
           Second 0 0 5 0
           Third  0 0 0 1
    > xa$A
    Error in xa$A : $ operator is invalid for atomic vectors

有一种使用 for() 循环进行迭代转换的方法,但在我的情况下完全没有效率,因为我的数据有数百万条记录。

为了进一步处理,我需要的输出格式是数据框。 如果有人解决了类似的问题,请分享。

【问题讨论】:

  • xa_df &lt;- as.data.frame(xa) 适合你吗?

标签: r dataframe


【解决方案1】:

你可以使用as.data.frame.matrix(xa)

# output
       A B C D
First  6 3 0 0
Fourth 0 2 0 5
Second 0 0 5 0
Third  0 0 0 1

## or
df_b <- as.data.frame.matrix(xa)[unique(df_a$ItemName), ]
data.frame(ItemName = row.names(df_b), df_b, row.names = NULL)
# output
  ItemName A B C D
1    First 6 3 0 0
2   Second 0 0 5 0
3    Third 0 0 0 1
4   Fourth 0 2 0 5

【讨论】:

    【解决方案2】:

    不使用xtabs,您可以执行以下操作:

    df %>%
     dplyr::group_by(ItemName, Feature) %>%
     dplyr::summarise(Sum=sum(Amount, na.rm = T)) %>%
     tidyr::spread(Feature, Sum, fill=0) %>%
     as.data.frame()
    

    这将根据您的需要进行转换,并保持为data.frame

    或者,您也可以as.data.frame(your_xtabs_result),这也应该可以

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2014-06-04
      相关资源
      最近更新 更多