楼主: 天涯印象
9495 10

[实际应用] 写一个判断语句,自动对数据框赋值 [推广有奖]

  • 0关注
  • 0粉丝

已卖:48份资源

硕士生

4%

还不是VIP/贵宾

-

威望
0
论坛币
53 个
通用积分
0.0600
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3305 点
帖子
58
精华
0
在线时间
142 小时
注册时间
2016-4-17
最后登录
2024-3-14

楼主
天涯印象 学生认证  发表于 2017-9-1 21:52:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
QQ截图20170901214832.jpg
IMG_20170901_214943.jpg
如图所示,做一个判断,有X1,X2两列,当X1=“是”,X2不变,当X2=“否”,给X2赋值上一行数据,用R语言怎么写呢?
二维码

扫码加我 拉你入群

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

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

关键词:数据框 如图所示 R语言

沙发
wangfs111222 发表于 2017-9-1 21:58:36 来自手机
天涯印象 发表于 2017-9-1 21:52
如图所示,做一个判断,有X1,X2两列,当X1=“是”,X2不变,当X2=“否”,给X2赋值上一行数据,用R语言 ...
cumsum

藤椅
z644070039 发表于 2017-9-2 09:46:44
  1. s<-c("y","n")
  2. da<-sample(s,20,replace=T)
  3. n<-rep(0,length(da))
  4. for(i in seq_along(da)) {
  5. ifelse(da[1]=="y",n[1]<-1,n[1]<-0)
  6. if(i==1) next
  7. ifelse(da[i]=="y",n[i]<-n[i-1]+1,n[i]<-n[i-1])
  8. }
  9. n
复制代码

板凳
cheetahfly 在职认证  发表于 2017-9-2 21:50:15
wangfs111222 发表于 2017-9-1 21:58
cumsum
exactly

报纸
z644070039 发表于 2017-9-3 16:05:38
z644070039 发表于 2017-9-2 09:46
简单的修改了一下,
  1. s<-c("y","n")
  2. da<-sample(s,20,replace=T)
  3. flag<-da=="y"
  4. cumsum(flag)
复制代码

地板
天涯印象 学生认证  发表于 2017-9-3 21:59:02
z644070039 发表于 2017-9-3 16:05
简单的修改了一下,
这个只是对向量进行了判断和填充数字啊,而我是要对数据框进行判断,根据判断情况进行赋值
  1. if(test$X1=="是") print("不变") else test$X2[i] <- test$X2[i-1]
复制代码
报错:
Error in `$<-.data.frame`(`*tmp*`, "X2", value = c("001", NA, NA, "002",  :
  replacement has 20 rows, data has 9
In addition: Warning message:
In if (test$X1 == "是") print("不变") else test$X2 <- test$X2[i -  :
  the condition has length > 1 and only the first element will be used
其中test就是那个数据框,还求大神指教

7
z644070039 发表于 2017-9-3 23:39:30
天涯印象 发表于 2017-9-3 21:59
这个只是对向量进行了判断和填充数字啊,而我是要对数据框进行判断,根据判断情况进行赋值报错:
Error  ...
s<-c("y","n")
da<-data.frame(a=sample(s,10,replace=T),b=sample(s,10,replace=T))
fun_1<-function(x) {x=cumsum(x=="y");x}
sapply(da,fun_1)

8
天涯印象 学生认证  发表于 2017-9-4 21:53:02
z644070039 发表于 2017-9-3 23:39
s
您好,这个数据框是这个样子的
  1. test3 <- data.frame(X1=c(TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE,FALSE,FALSE),
  2.                     X2=c(001, NA, NA, 002, NA, 003, NA, NA, NA))
复制代码
我想让X2列第1,2个NA换为001,第3个NA换为002, 后头的为003,也就是判断一下每当X1列为FALSE时,X2列为对应行前一行的数字,感谢解答

9
katymeala 发表于 2017-9-6 15:41:44
#step1
index <- which(!is.na(data[,2]))
#step2
delta <- diff(c(index,length(v)+1))
#final step
result <- rep(data[,2][index],delta)
已有 1 人评分论坛币 学术水平 收起 理由
天涯印象 + 5 + 1 好的意见建议

总评分: 论坛币 + 5  学术水平 + 1   查看全部评分

10
z644070039 发表于 2017-9-6 21:16:00
天涯印象 发表于 2017-9-4 21:53
您好,这个数据框是这个样子的我想让X2列第1,2个NA换为001,第3个NA换为002, 后头的为003,也就是判断一 ...
  1. for(i in seq_along(x)) {
  2. if(is.na(x[i])) x[i]=x[i-1]
  3. }
复制代码

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

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