全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5152 5
2009-03-11

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

问题: 如何实现 :只要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)

二维码

扫码加我 拉你入群

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

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

全部回复
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编辑过]

二维码

扫码加我 拉你入群

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

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

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
二维码

扫码加我 拉你入群

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

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

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
二维码

扫码加我 拉你入群

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

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

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" #不行!

谢谢!

二维码

扫码加我 拉你入群

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

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

2009-3-16 15:10:00

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

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群