1065 6

[问答] R语言某列的编辑 [推广有奖]

  • 0关注
  • 0粉丝

高中生

32%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
224 点
帖子
13
精华
0
在线时间
30 小时
注册时间
2020-8-7
最后登录
2023-10-19

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大神,请求帮助!!!我现在想新增一列;这新增的一列是根据每个ID的Time>0的DV值减去Time<0的DV值,重新获得的新的DV值成为一列;请问这个用R语言代码应该怎么写啊?感谢各位大神了!!!像下面的数据集一样。DDV是新增的一列。time<=0的看作是基线值0;后面的数值减去之前的基线值。这里的一个难点是:如何根据ID进行分类呢?
dda50d9b972bf7fc8e744c97eff6ec6.png
二维码

扫码加我 拉你入群

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

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

关键词:R语言 time 请求帮助 IME Tim R语言

回帖推荐

llb_321 发表于2楼  查看完整内容

每个ID只有一个DV负值吗?

本帖被以下文库推荐

沙发
llb_321 在职认证  发表于 2021-2-18 09:55:41 |只看作者 |坛友微信交流群
每个ID只有一个DV负值吗?
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 问到点子上

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

使用道具

藤椅
jiamaster 发表于 2021-2-18 10:43:33 来自手机 |只看作者 |坛友微信交流群
热爱编码的秃头女孩 发表于 2021-2-17 21:22
各位大神,请求帮助!!!我现在想新增一列;这新增的一列是根据每个ID的Time&gt;0的DV值减去Time
ok

使用道具

板凳
乐天天12300 发表于 2021-2-18 13:28:34 |只看作者 |坛友微信交流群
先找出每个ID的基线值,然后用这个数据和原始数据用ID匹配合并,得到新的数据会比原数据多一列基线值,然后就简单了。

使用道具

报纸
llb_321 在职认证  发表于 2021-2-18 18:55:05 |只看作者 |坛友微信交流群
假设每ID组,可能有多个time负值,也可能没有负值,我们就以time最小值作为基线。
做了个示例数据money.csv:
       ID  time   DV
1  111001 -0.05  6.8
2  111001  0.00  0.0
3  111001  1.00  6.0
4  111001  2.00  5.3
5  111001  4.00  4.8
6  110100  1.00  2.7
7  110100  3.00  8.0
8  110100  2.00  4.0
9  110100 -0.03  6.0
10 110100 -0.04  2.0
11 110101 -0.30  3.0
12 110101  2.00  9.0
13 110101  4.00  1.0
14 111111 -0.40  7.0
15 111111  1.00 10.0
16 111111  2.00  2.0
17 111111  3.00  3.0
应该和你的数据差不多吧,这里ID是没有排序的,所以处理时需留意。
代码差不多是这样的
  1. library(dplyr)
  2. money<-read.csv("money.csv",header=T)
  3. #按组寻找基线
  4. groupBaseline <-
  5.   money %>%
  6.   group_by(ID) %>%
  7.   filter(time == min(time)) %>%
  8.   arrange(ID)
  9. #计算各组行数
  10. gCount <-
  11.   money %>%
  12.   group_by(ID) %>%
  13.   summarise(n = n()) %>%
  14.   arrange(ID)
  15. #添加新列
  16. new <-
  17.   money %>%
  18.   arrange(ID) %>%
  19.   mutate(DDV = (DV - rep(groupBaseline$DV, gCount$n)))
  20. #DDV中小于等于零的都改为0
  21. new[which(new[, 2] <= 0), 4] <- 0
复制代码

代码在这里可能存在现实问题,是美元符号的原因。正确的代码显示,可以看下面的图:
111111122.png

已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cheetahfly + 10 热心帮助其他会员
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 论坛币 + 10  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

是的

使用道具

llb_321 发表于 2021-2-18 18:55
假设每ID组,可能有多个time负值,也可能没有负值,我们就以time最小值作为基线。
做了个示例数据money.cs ...
谢谢大神

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-10 20:07