将多个重复行转换为列 R

5

我是新手使用R语言,我的数据框中第一列有多个重复值,但第二列的值是唯一的。

我希望保留第一列中的唯一值,并为每个唯一值创建一个不同的列。

我的当前数据框看起来像这样:

Item    Value
Apricot 4
Apricot 2
Apricot 5
Banana  4
Carrot  7
Carrot  5

我希望它看起来像这样:

并且,我想它看起来像这个样子:

Item    Value 1     Value 2     Value 3
Apricot     4           2           5
Banana      4       
Carrot      7           5   

提前感谢您。Fojjit

2个回答

6

如果您使用的是devel版本,即1.9.7,则可以轻松使用data.table完成此操作(安装细节在此处)。方便的rowid函数可以根据变量获取序列。将其用于dcast公式中,我们就可以得到“宽”输出。

library(data.table)
dcast(setDT(df1), Item~rowid(Item, prefix="Value"), value.var="Value")
#      Item Value1 Value2 Value3
#1: Apricot      4      2      5
#2:  Banana      4     NA     NA
#3:  Carrot      7      5     NA

我在使用rowid函数时遇到了困难,你能帮忙吗?谢谢。 - Fojjit
@Fojjit。在CRAN上可下载的data.table 1.9.6版本中不提供rowid函数。要使用rowid,您需要下载开发版本1.9.7,如答案中所述的链接。 - lmo
@akrun 虽然这是一个旧的问题,但它帮助我完成了我的分析。不过,如果您能告诉我当df1中添加了另一个需要转换的变量时,比如Item、value、Amount,那就太好了。 - ssan
@ssan 请发布一个新问题。 - akrun

3
您需要一个额外的列来表示值的顺序,然后您可以使用spread
library(dplyr)
library(tidyr)
your.data %>%
  group_by(Item) %>%
  mutate(Order = seq_along(Item)) %>%
  spread(key = Order, value = Value)

添加一个用于值排序的列是什么意思?谢谢。 - Fojjit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接