楼主: steven64
5222 5

[求助]3个data.frame之间的赋值问题? [推广有奖]

  • 0关注
  • 1粉丝

大专生

25%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
496 点
帖子
34
精华
0
在线时间
24 小时
注册时间
2007-8-28
最后登录
2014-5-5

楼主
steven64 发表于 2009-3-11 23:28:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

希望问各位高人指点一下小弟,不剩=盛感激!

问题: 如何实现 :只要b中的“level”在a中,就将b$no1赋值给a$no1; c同b,赋值给a$no2.  ?

               即最后结果:

> a
  level no1 no2
1     A   0   3
2     B   1   0
3     C   2   0
4     D   0   0
>

a= data.frame (level =c("A","B","C","D"),no1=rep(0,4),no2=rep(0,4))
b= data.frame (level =c("B","C"),no1=1:2)
c= data.frame (level =c("A","E"),no2=3:4)

二维码

扫码加我 拉你入群

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

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

关键词:Frame Fram Data FRA RAM Data 赋值 Frame

回帖推荐

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

a more readable and robust-to-replicates-in-a way isa= data.frame (level =c("A","B","C","D","B"),no1=rep(0,5),no2=rep(0,5))b= data.frame (level =c("B","C"),no1=1:2)c= data.frame (level =c("A","E"),no2=3:4)#merge a,b togethertmp<-merge(a,b,by="level",all.x=T)#assign b's vlaue to atmp$no1.x <- with(tmp, ifelse(is.na(no1.y), no1.x, no1.y))#drop redundant column tmp$no1.y <- NULLtmp<-merge(tmp ...

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

match(a$level,b$level)->tmpa$no1<-ifelse(is.na(tmp),a$no1,b$no1[tmp])match(a$level,c$level)->tmp1a$no2<-ifelse(is.na(tmp1),a$no2,c$no2[tmp1])a [此贴子已经被作者于2009-3-13 2:57:51编辑过]

本帖被以下文库推荐

沙发
vrooadk 发表于 2009-3-12 23:33:00
match(a$level,b$level)->tmp
a$no1<-ifelse(is.na(tmp),a$no1,b$no1[tmp])

match(a$level,c$level)->tmp1
a$no2<-ifelse(is.na(tmp1),a$no2,c$no2[tmp1])

a

[此贴子已经被作者于2009-3-13 2:57:51编辑过]

藤椅
vrooadk 发表于 2009-3-13 00:05:00
a more readable and robust-to-replicates-in-a way is

a= data.frame (level =c("A","B","C","D","B"),no1=rep(0,5),no2=rep(0,5))
b= data.frame (level =c("B","C"),no1=1:2)
c= data.frame (level =c("A","E"),no2=3:4)

#merge a,b together
tmp<-merge(a,b,by="level",all.x=T)
#assign b's vlaue to a
tmp$no1.x <- with(tmp, ifelse(is.na(no1.y), no1.x, no1.y))
#drop redundant column
tmp$no1.y <- NULL

tmp<-merge(tmp,c,by="level",all.x=T)
tmp$no2.x <- with(tmp, ifelse(is.na(no2.y), no2.x, no2.y))
tmp$no2.y <- NULL

#rename
colnames(tmp)<-c("level","no1","no2")
tmp

板凳
dwl001 发表于 2009-3-13 11:38:00
a$no1[is.element(a$level,b$level)]=b$no1
a$no2[is.element(a$level,c$level)]=c$no2

报纸
steven64 发表于 2009-3-15 12:28:00
以下是引用vrooadk在2009-3-12 23:33:00的发言:
match(a$level,b$level)->tmp
a$no1<-ifelse(is.na(tmp),a$no1,b$no1[tmp])

match(a$level,c$level)->tmp1
a$no2<-ifelse(is.na(tmp1),a$no2,c$no2[tmp1])

a

谢谢!这个问题解决,不过还有一个白痴点的问题想请教一下:

a<-data.frame(no=c(1,2,2,4),lev=c("A","B","C","B"))

> a
  no lev
1  1   A
2  2   B
3  2   C
4  4   B

我想将lev=B的,改为lev=D,但按下面的做法不行,要怎样才行?

如果是numeric的就能直接如下赋值,为什么character不能呢?

a$no[a$no==2]<-10
a$lev[a$lev=="B"]<-"D" #不行!

谢谢!

地板
dwl001 发表于 2009-3-16 15:10:00

levels(a$lev)[levels(a$lev)=="B"]="D"

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

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