全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
20177 2
2018-08-01
在试图做一个产品路径的数据处理,逻辑是对同一个 id,'target' 字段取下一行的 ‘item’ 值,代码如下:

id <- c('1001','1001','1001','1002','1002','1003','1003','1003','1003')
item <- c('milk','bread','cake','milk','sugar','bread','cake','cafe','milk')
df1 <- data.frame(id, item, stringsAsFactors = F)
for (i in c(1:length(df1$id)-1)) {
  if (df1$id[i+1] == df1$id) df1$target <- df1$item[i+1]
  else (df1$target <- NA)
}

上述代码我贴个截图,因为发现发出来以后格式有点问题: Snipaste_2018-08-01_23-21-05.png

错误提示:
11.png


希望得到:
id          item        target
1001     milk         bread
1001     bread       cake
1001     cake         NA
1002     milk         sugar
1002     sugar       NA
1003     bread       cake
1003     cake         cafe
1003     cafe         milk
1003     milk          NA

请教各位大神,代码出错在哪,应该怎样得到如上结果?


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-8-1 23:46:51
1:length(df1$id)-1的运行结果为0 1 2 3 4 5 6 7 8,R数组下标从1开始,if (df1$id[i+1] == df1$id[i]) 会出错
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-8-2 11:13:37
nuomin 发表于 2018-8-1 23:46
1:length(df1$id)-1的运行结果为0 1 2 3 4 5 6 7 8,R数组下标从1开始,if (df1$id == df1$id) 会出错
感谢提醒!检查了一下,用括号把 (length(df1$id)-1) 括起来了~变成1:(length(df1$id)-1), 这样结果就得到 1 2 3 4 5 6 7 8,避免了从 0 开始的报错了~~
十分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群