楼主: xihaheng
2084 3

[问答] 在定义数据框时循环定义tag列名 [推广有奖]

  • 0关注
  • 0粉丝

小学生

21%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
43 点
帖子
3
精华
0
在线时间
4 小时
注册时间
2014-3-29
最后登录
2017-6-2

楼主
xihaheng 发表于 2017-4-17 01:26:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. library(data.table)
  2. dt_all = data.table(ID = 1:100, key = 'ID')
  3. for(i in 1:100) {
  4.   dt_part = data.table(ID = sample(1:100, 80), value = rnorm(80), key = 'ID')#how to change the colname 'value' to 'value1', 'value2', ..., 'value100'
  5.   dt_all = merge(dt_all, dt_part, by = ID)
  6. }
复制代码

如代码所示,希望在定义数据框时可以将列名进行循环定义,这样merge之后每次循环的列名有不同,才不会出错。虽然可以在定义dt_part之后强行加一行names(dt_part)[2] = paste('value', i, sep = ''),但还是想知道能否在定义数据框时即实现循环定义列名tag.不仅省一行代码,也能加快运行速度。谢谢!

二维码

扫码加我 拉你入群

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

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

关键词:数据框 tag Library change Sample 数据框 列名 tag 循环

回帖推荐

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

在循环里加上重命名?需要用plyr包

沙发
cdl0102 发表于 2017-4-18 19:45:10
  1. library(plyr)
  2. ……dt_part = data.table(ID = sample(1:100, 80), value = rnorm(80), key = 'ID')
  3. dt_part <- rename(dt_part, c(value = paste('value',i,sep = '')))
  4. ……
复制代码

在循环里加上重命名?需要用plyr包

藤椅
cdl0102 发表于 2017-4-18 19:58:20
另外楼主,最后&nbsp;dt_all = merge(dt_all, dt_part, by = ID) 合并那里,应该用 by='ID' 吧,我不加引号测试会报错
而且不需要加参数all.x=TRUE 么?

板凳
xihaheng 发表于 2017-5-22 03:02:31
cdl0102 发表于 2017-4-18 19:58
另外楼主,最后&nbsp;dt_all = merge(dt_all, dt_part, by = ID) 合并那里,应该用 by='ID' 吧,我不加引号 ...
感谢感谢!
您的回复提醒了我,似乎可以直接在定义dt_part之后,用names(dt_part) = c('ID', paste('value', i, sep = '')),这样应该就不用plyr包了吧。加一行代码就行了。
另外,by = 'ID'确实是我的疏忽,写问题时没注意测试代码,多谢提醒!

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

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