楼主: vieruodu
7228 9

[问答] 同一列数据内,根据条件,上下前后相减 [推广有奖]

  • 0关注
  • 0粉丝

本科生

36%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
2.3506
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1078 点
帖子
42
精华
0
在线时间
97 小时
注册时间
2011-1-23
最后登录
2024-1-8

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
屏幕快照 2018-11-05 下午3.22.12.png


如上图所示,
想让同一个sub条件下,SD==1 条件下的 rating_indif2 减去 SD==0 条件下的rating_indif2,
这样,每一个sub,计算出一个差值。
另外需要注意,数据中SD==1 和SD==0的条件并不一定是固定的前后顺序
能不能不使用循环就能实现计算?
求大牛帮忙解答,顺便给我涨点知识。
多谢!


二维码

扫码加我 拉你入群

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

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

关键词:RATING INDI DIF ATI Tin

回帖推荐

lemon.d 发表于2楼  查看完整内容

你这不让用循环,只能用`lapply`了啊。

jgchen1966 发表于3楼  查看完整内容

library(tidyverse) library(magrittr) ### 此处假设 每组sub只有二行,一行sd==0,另一行sd==1 mydata%% arrange(sub,sd)%>% ## 排序,保证,每组sub 中 sd==0在第一行,sd==1在第二行 group_by(sub)%>% mutate( dif=rating_indif2-lag(rating_indif2))%>% ## dif 便是你要的值 ,sd==0 时 dif为NA ungroup() #### 若只想要dif 有值的行 ...
沙发
lemon.d 发表于 2018-11-6 10:46:51 |只看作者 |坛友微信交流群
你这不让用循环,只能用`lapply`了啊。
  1. df <- data.frame(sub=rep(26:28, each=2),
  2.                  sd=rep(c(0,1), times=3),
  3.                  rating_indif=rnorm(6))
  4. subb <- df$sub %>% unique()
  5. noforloop <- function(subb) {
  6.   sub_temp <- df[df$sub==subb,]
  7.   dif_temp <- sub_temp[sub_temp$sd==1, "rating_indif"]-sub_temp[sub_temp$sd==0, "rating_indif"]
  8.   return(c(subb,dif_temp))
  9. }
  10. your_dif <- lapply(subb, noforloop) %>% unlist %>% matrix(nrow=length(subb), byrow=T) %>%
  11.   as.data.frame %>% `names<-`(c("sub", "diff"))
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

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

使用道具

藤椅
jgchen1966 发表于 2018-11-6 15:15:25 |只看作者 |坛友微信交流群
library(tidyverse)
library(magrittr)
###  此处假设 每组sub只有二行,一行sd==0,另一行sd==1
mydata%<>% arrange(sub,sd)%>%  ## 排序,保证,每组sub  中 sd==0在第一行,sd==1在第二行
                        group_by(sub)%>%
                        mutate( dif=rating_indif2-lag(rating_indif2))%>% ## dif 便是你要的值 ,sd==0 时  dif为NA
                        ungroup()   
####  若只想要dif 有值的行,可继续如下

    mydata%<>%filter(not(is.na(dif)))
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

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

使用道具

板凳
vieruodu 发表于 2018-11-6 16:33:57 |只看作者 |坛友微信交流群
lemon.d 发表于 2018-11-6 10:46
你这不让用循环,只能用`lapply`了啊。
果然是让我学习了!!我自己其实是用循环解决的

使用道具

报纸
vieruodu 发表于 2018-11-6 16:34:25 |只看作者 |坛友微信交流群
jgchen1966 发表于 2018-11-6 15:15
library(tidyverse)
library(magrittr)
###  此处假设 每组sub只有二行,一行sd==0,另一行sd==1
这个思路也很棒,真心是学习到了,新技能get!

使用道具

地板
vieruodu 发表于 2018-11-6 16:36:12 |只看作者 |坛友微信交流群
jgchen1966 发表于 2018-11-6 15:15
library(tidyverse)
library(magrittr)
###  此处假设 每组sub只有二行,一行sd==0,另一行sd==1
没理解错的话,你这里的%<>%是打错的,其实是指%>%, 对吧~

使用道具

7
jgchen1966 发表于 2018-11-6 18:53:31 |只看作者 |坛友微信交流群
vieruodu 发表于 2018-11-6 16:36
没理解错的话,你这里的%%是打错的,其实是指%>%, 对吧~
没错的。具体请参考:magrittr  

使用道具

8
lin.hu 发表于 2021-10-13 18:53:14 |只看作者 |坛友微信交流群
如果SD值不只有0和1,还有0,1,2,3,
同一个sub条件下,SD==1,2,3 条件下的 rating_indif2 减去 SD==0 条件下的rating_indif2
这样的话该怎么写呢?感谢!

使用道具

9
caojiayan 发表于 2021-11-10 14:31:21 来自手机 |只看作者 |坛友微信交流群
能否分享一下循环的代码,初学,循环感觉好难

使用道具

10
佳一一佳 发表于 2022-11-9 20:18:21 |只看作者 |坛友微信交流群
lin.hu 发表于 2021-10-13 18:53
如果SD值不只有0和1,还有0,1,2,3,
同一个sub条件下,SD==1,2,3 条件下的 rating_indif2 减去 SD==0 条 ...
你好,请问你解决你的问题了吗?

使用道具

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

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

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

GMT+8, 2024-4-25 09:55