【问题标题】:Filling up a table in R [duplicate]在R中填写表格[重复]
【发布时间】:2015-01-03 02:06:27
【问题描述】:

我有 2 个向量:

c1 <- c(1,2,0,1,3,4,5,6,1,2,3,0)
c2 <- c(1,2,0,5,0,2,1)

> table(c1)   
c1   
0 1 2 3 4 5 6   
2 3 2 2 1 1 1   
> table(c2)  
c2  
0 1 2 5   
2 2 2 1  

现在我希望c2 具有以下形式:

> table(c2)  
c2  
0 1 2 3 4 5 6   
2 2 2 0 0 1 0

如何从这些表中取出向量 (2, 3, 2, 2, 1, 1, 1) 和 (2, 2, 2, 0, 0, 1, 0)?

【问题讨论】:

标签: r vector


【解决方案1】:

使用factor 并将c1 的唯一值传递给c2levels,以便设置与c1 值对应的空条目

table(factor(c2, levels = sort(unique(c1))))
# 0 1 2 3 4 5 6 
# 2 2 2 0 0 1 0 

或使用union(如@Svens 已删除答案中所述)

table(factor(c2, levels = sort(union(c1, c2))))
# 0 1 2 3 4 5 6 
# 2 2 2 0 0 1 0 

为了得到实际值使用as.numeric

as.numeric(table(factor(c2, levels = sort(unique(c1)))))
## [1] 2 2 2 0 0 1 0

【讨论】:

    【解决方案2】:

    所以 R 不知道有缺失值。说服它的最简单方法是指定 levelsfactor 包含缺失的元素。

    例如

    > table(factor(c2, levels=0:6))
    
    0 1 2 3 4 5 6
    2 2 2 0 0 1 0
    

    对于这个问题的第二部分,通常表格本身足以满足大多数目的。

    > a <- table(factor(c2, levels=0:6))
    > a[1] + 1
    0
    3
    

    如果您忽略“0”标头,那么您几乎可以进行任何矢量操作。但是如果你想完全删除标题,你可以转换为原始数字数组

    > as.numeric(a)
    [1] 2 2 2 0 0 1 0
    

    【讨论】:

    • 我认为 OP 想要与 c1 对应的级别,而不是手动设置它们
    猜你喜欢
    • 2018-04-22
    • 2018-12-19
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2019-02-02
    • 2013-06-18
    相关资源
    最近更新 更多