【发布时间】:2019-08-13 20:15:11
【问题描述】:
我有一个data.frame 有两个变量es 和id。我想添加一个名为weeks 的新变量。但我想单独创建weeks,但对每个id 都是唯一的。
例如,如果 es == "SHORT" 对于所有 id == 1 的行,我想要相同的数字(例如,3)。如果 id == 2 是不同的数字(例如,1)。
我能否在 BASE R 中实现这一点(请参阅下面的所需输出结构)?
注意:SHORT < DEL1 < DEL2 以每个id 下的数值表示。
下面是我试过的数据和代码,没有成功:
D <- data.frame(es = c("SHORT", "SHORT", "SHORT","DEL1", "DEL1","DEL1","SHORT",
"SHORT", "SHORT", "DEL1", "DEL1", "DEL1","DEL2","DEL2","DEL2"),
id = c(rep(1, 6), rep(2, 9)) )
weeks <- ifelse(D$es == "SHORT", sample(1:5, 6, T), ifelse(D$es == "DEL1",
sample(4:8, 7, T),
sample(7:12, 2, T)))
所需的输出结构(数值是随机的):
es id weeks
SHORT 1 3
SHORT 1 3
SHORT 1 3
DEL1 1 5
DEL1 1 5
DEL1 1 5
SHORT 2 1
SHORT 2 1
SHORT 2 1
DEL1 2 6
DEL1 2 6
DEL1 2 6
DEL2 2 8
DEL2 2 8
DEL2 2 8
【问题讨论】:
-
创建一个查找data.frame然后使用
merge -
试试
D_lookup <- unique(D); D_lookup$weeks <- c(3, 5, 1, 6, 8); out <- merge(D, D_lookup), out[order(out$id, out$weeks), ] -
查看我更新的评论。
-
(刚刚从
merge发现了sort参数。)
标签: r function dataframe lapply