楼主: hkhorsetrack
991 1

[问答] 如何查找对上一筆的值 [推广有奖]

  • 0关注
  • 0粉丝

本科生

15%

还不是VIP/贵宾

-

威望
0
论坛币
49 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
336 点
帖子
26
精华
0
在线时间
95 小时
注册时间
2018-4-5
最后登录
2020-6-13

楼主
hkhorsetrack 发表于 2018-4-5 21:18:20 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大大好,

假如有如下数据,
indexnameamount
1A

10

2B

14

3C

3

4A

4

5A

15

6C

9

7B

12

8C

6

9A

7



要实现效果如下

indexnameamount對上一筆位置(index)對上一筆amount
1A

10

NANA
2B

14

NANA
3C

3

NANA
4A

4

1

10

5A

15

4

4

6C

9

3

3

7B

12

2

14

8C

6

6

9

9A

7

5

15



有什么好的办法不用循环都能做到呢?
謝謝


二维码

扫码加我 拉你入群

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

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

关键词:如何查找 amount Index name AMO

沙发
swufeyumeng 在职认证  发表于 2018-4-6 11:29:58
  1. library('dplyr')
  2. df<-data.frame(index=1:9,name=c('A','B','C','A','A','C','B','C','A'),amount=c(10,14,3,4,15,9,12,6,7))
  3. prev<-function(x) {
  4.   index.x<-which(df#name==x)
  5.   index.x.lag<-lag(index.x)
  6.   df#index_prev[index.x]<<-df#index[index.x.lag]
  7.   df#amount_prev[index.x]<<-df#amount[index.x.lag]
  8. }
  9. lapply(levels(df#name),prev)
复制代码

程序执行结果保存在df数据框中。论坛好像不支持美元符号,以上代码把#改成$即可。
需要注意的几个点:
1、定义了prev函数,参数为x,x可以为A、B、C。
2、在prev函数中需要对df变量进行操作,由于涉及函数变量作用域的问题,函数体中用到了<<-赋值方法。
3、用到了dplyr::lag()函数,用于对A、B、C的索引进行滞后。
4、使用了factor函数提取name列中的因子,当然也可以分别执行prev("A")、prev("B")、prev("C"),但如果name列涉及更多的元素(比如26个字母),这种办法可以简化操作。
已有 1 人评分论坛币 收起 理由
cheetahfly + 20 精彩帖子

总评分: 论坛币 + 20   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 05:56