
[英]R - Adding a count to a dataframe based on values in current row and other rows
[英]R: append values of other rows to current row based on value of another column
我有一个类似以下的数据框(alter.hh2):
wk hh brd count flavor mean_multi h_size
1 W52 1213 546 1 PEACH 2.11 2
2 W52 4493 546 1 BBA 1.63 2
5 W53 2093 5367 4 PEA 2.12 2
6 W53 2043 5366 5 RBYA 1.93 1
9 W53 2093 546 8 VANI 1.78 2
对于每一行,我想将同一周的flavor(如果有不同的值),mean_multi和brd的值附加到其上,如下所示,同时保持其余各行的其余值不变:
wk hh brd count flavor mean_multi h_size flavor2 brd2 mean_multi2
W52 1213 546 1 PEACH 2.11 2 BBA 546 1.63
W52 4493 546 1 BBA 1.63 2 PEACH 546 2.11
W53 2093 5367 4 PEA 2.12 2 RBYA 5367 1.93
W53 2043 5366 5 RBYA 1.93 1 PEA 5366 2.12
如果每周有两个以上的值,我希望结果(迭代地)如下所示:
wk hh brd count flavor mean_multi h_size flavor2 brd2 mean_multi2 flavor3 brd3 mean_multi3
W53 2093 5367 4 PEA 2.12 2 RBYA 5366 1.93 VANI 546 1.78
W53 2043 5366 5 RBYA 1.93 1 PEA 5367 2.12 VANI 546 1.78
W53 2093 546 8 VANI 1.78 2 PEA 5367 2.12 RBYA 5366 1.93
我已经尝试过通过重塑软件包使用以下代码,但是似乎没有给我期望的结果:
w <- reshape(alter.hh2,
timevar = c("flavor","wk"),
idvar = c("count", "hh"),
direction = "wide")
会不会有任何见解!
我们可以使用data.table
。 如果每个“ wk”('nm1')的值不同,则获取我们需要附加的列名(即“ brd”,“ flavor”,“ mean_multi”)。 将'data.frame'转换为'data.table'( setDT(alter.hh2)
),按'hh'分组,我们选择第一行( head(.SD, 1)
),然后按'wk'分组,然后指定.SDcols
,我们循环遍历.SDcols
的列并得到相反的结果,并将输出分配( :=
)到新列。
library(data.table)
nm1 <- names(alter.hh2)[c(3, 5, 6)]
setDT(alter.hh2)[,head(.SD, 1) , hh][, paste0(nm1, 2) := lapply(.SD, rev),
by = wk, .SDcols = nm1][]
# hh wk brd count flavor mean_multi h_size brd2 flavor2 mean_multi2
#1: 1213 W52 546 1 PEACH 2.11 2 546 BBA 1.63
#2: 4493 W52 546 1 BBA 1.63 2 546 PEACH 2.11
#3: 2093 W53 5367 4 PEA 2.12 2 5367 PEA 2.12
#4: 2043 W53 5366 5 RBYA 1.93 1 5366 RBYA 1.93
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.