【问题标题】:How to build a new column (/data.frame) from a table, and assign corresponding values to the rows如何从表中构建新列(/data.frame),并将相应的值分配给行
【发布时间】:2017-06-27 23:56:32
【问题描述】:

我打印了列变量的摘要,如下所示:

summary(document$subject)

A,B,C,D,E,F,.. 是属于 data.frame 列的主题,其中 A,B,C,... 在列中出现多次,上面的摘要显示这些主题在文件中出现的次数(频率)。另外,“其他”一词是指那些在文件中只出现过一次的主题,我还需要为这些主题分配“1”。

有这么多不同的主题,如果我们使用命令“c”,很难一一列出。

我想建立一个新列(或 data.frame),然后将这些相应的数字(分数)分配给主题。理想情况下,它会在文件中变成这样:

A    198
B    113
C    96
D    69
A    198
E    65
F    62
A    198
C    113
BZ   21
BC    1
CJ    1

...

我想知道应该使用什么命令从汇总表中获取分数/值,然后构建一个新列以将这些值分配给文件中的相应主题。

另外,由于是R打印的汇总表,我不知道如何将其构建到文件中的表格中,或者从表格中取出值和主题名称。我还想知道如何找出在文件中只出现一次的主题名称,以便汇总表将它们添加到“其他”中。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果没有可重现的示例,您的问题很难解释。请查看此威胁以获取有关如何执行此操作的提示:

    How to make a great R reproducible example?

    话虽如此,这就是我如何解释您的问题。您有两个数据框,一个包含每个主题的分数,另一个包含多个主题的列:

    Sum <- data.frame(subject=c("A","B"),score=c(1,2))
    foo <- data.frame(subject=c("A","B","A"))
    
    > Sum
      subject score
    1       A     1
    2       B     2
    > foo
      subject
    1       A
    2       B
    3       A
    

    然后您可以使用match() 将一个数据帧中的主题与另一个数据帧匹配,并在第二个数据帧中创建新变量:

    foo$score <- Sum$score[match(foo$subject, Sum$subject)]
    
    > foo
      subject score
    1       A     1
    2       B     2
    3       A     1
    

    【讨论】:

    • 非常感谢您的留言:) 很有帮助,您很好地解释了我的问题。但是我还需要补充一点,或者我不确定。由于主题太多以至于很难手动列出,而且由于主题在列中重复出现,我想知道如何使用命令列出这些主题,如上所示?谢谢!
    猜你喜欢
    • 2021-08-02
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 2017-07-17
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多