请选择 进入手机版 | 继续访问电脑版
楼主: superyxo
13836 7

[问答] 请问在R里怎么把list按元素名字合并进data frame [推广有奖]

  • 2关注
  • 1粉丝

硕士生

64%

还不是VIP/贵宾

-

威望
0
论坛币
91 个
通用积分
1.0005
学术水平
7 点
热心指数
2 点
信用等级
2 点
经验
9870 点
帖子
93
精华
0
在线时间
199 小时
注册时间
2007-8-28
最后登录
2021-4-15

superyxo 发表于 2014-11-27 17:43:03 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请问在R里怎么把一个list按照list里每一项的名字合并到一个data frame里,像下边的这个例子一样
创建 data frame

library("plyr")

id <- rep(letters[1:3],4)
year <- seq(2001,2012)
df <- data.frame(id,year)

df <- arrange(df,id,year)

data frame df是这个样子的:


id    year
a    2001
a    2004
a    2007
a    2010
b    2002
b    2005
b    2008
b    2011
c    2003
c    2006
c    2009
c    2012


创建 list

mylist <-list(a=11, b=12, c=10, d=15)

我想把mylist里每个元素的名字“a”, “b”, “c”, “d”跟data frame df里的id对应,并把mylist作为一个新的列weight合并进df,我想得到的结果是
id    year    weight
a    2001    11
a    2004    11
a    2007    11
a    2010    11
b    2002    12
b    2005    12
b    2008    12
b    2011    12
c    2003    10
c    2006    10
c    2009    10
c    2012    10



请问在R里怎么实现?
二维码

扫码加我 拉你入群

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

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

关键词:Frame list Fram Data IST letters frame 元素

本帖被以下文库推荐

jiangbeilu 学生认证  发表于 2014-11-27 18:48:40 |显示全部楼层 |坛友微信交流群
你可以换一种考虑方式:
1.创建一个新的向量:
2.对应id这列你有几个a字母,就在这一个新的向量里复制多少个11;
3.其余的依次
4.这一个新的向量加进原有data frame
已有 1 人评分热心指数 收起 理由
superyxo + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

使用道具

ywh19860616 发表于 2014-11-27 19:10:51 |显示全部楼层 |坛友微信交流群
主要问题是怎么匹配df中的变量名称,一种比较笨的方法。
  1. library("plyr")
  2. id <- rep(letters[1:3],4)
  3. year <- seq(2001,2012)
  4. df <- data.frame(id,year)
  5. df <- arrange(df,id,year)


  6. mylist <-list(a=11, b=12, c=10, d=15)
  7. mlist <- unlist(mylist)[1:3]
  8. d1 <- rep(mlist,each=4)
  9. df$d1 <- d1
  10. df
复制代码
已有 1 人评分学术水平 热心指数 收起 理由
superyxo + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

马甲1号 发表于 2014-11-27 20:36:28 |显示全部楼层 |坛友微信交流群
  1. library("plyr")
  2. id <- rep(letters[1:3],4)
  3. year <- seq(2001,2012)
  4. df <- data.frame(id,year)
  5. df <- arrange(df,id,year)
  6. mylist <-list(a=11, b=12, c=10, d=15)
  7. mydict= unlist(mylist)
  8. df['weight'] = mydict[df[,'id']]
  9. df
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

superyxo 发表于 2014-11-28 11:25:53 |显示全部楼层 |坛友微信交流群
马甲1号 发表于 2014-11-27 20:36
多谢!这个就是我想要的!

使用道具

superyxo 发表于 2014-11-28 11:29:18 |显示全部楼层 |坛友微信交流群
ywh19860616 发表于 2014-11-27 19:10
主要问题是怎么匹配df中的变量名称,一种比较笨的方法。
多谢!这个方法对这个简单的例子没问题,不过我的真实的数据比这个要复杂,所以不能只用个数对照来合并,必须要用名字对应。

@马甲1号的方法正好

使用道具

一路嘿嘿 发表于 2014-11-28 13:55:56 |显示全部楼层 |坛友微信交流群
  1. df$weight  <- mylist[match(df$id,names(mylist))]
复制代码

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
superyxo + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

youling2013 学生认证  发表于 2018-5-2 17:31:40 |显示全部楼层 |坛友微信交流群

xkd<-vector("list",50)
for (i in 1:50){  
  xkd[[i]]=x^i
}
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

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

使用道具

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

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

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

GMT+8, 2024-3-29 10:25