楼主: pumbaashu
1593 4

[问答] [求助]关于使用R数据格式转换 [推广有奖]

  • 2关注
  • 0粉丝

高中生

2%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
578 点
帖子
18
精华
0
在线时间
22 小时
注册时间
2013-5-9
最后登录
2018-5-31

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
原始数据是一个dataframe
示例:
cardid  termid transnum transrmb
as12e    tm1     6        1000
hyy3      tm2     3         500
yhff      tm3       6         800
...

希望目标数据是list:
$transnum
cardid tm1  tm2   tm3  ...
as12e   6      0      0   ...
...

$transrmb
cardid tm1  tm2   tm3  ...
as12e   1000   0     0    ...
...

求高手指教(PS:使用其他编程语言自己可以实现,但是对R不够熟悉,希望能用R来解决)

二维码

扫码加我 拉你入群

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

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

关键词:格式转换 数据格式 Dataframe Trans Frame 格式转换

回帖推荐

meishanjia1900 发表于4楼  查看完整内容

好吧,b1,b2就是你想要的东西。如果你想要紧凑一点,将结果直接凑成一个列表输出,也可以直接执行以下代码: b就是你想要的东西。你知道你的提问帖贴了那么长时间,但回帖人数很少的原因么? 第一,以上两个结果矩阵,左上角应该为空,但你却加了cardid字段,这是引起混乱的做法 第二,最致命的一点,你说你想要得到XXXX这样的结果,可是你给出的样例矩阵,每个都只有两行,除去题头只有一行。你让我们怎么猜你想要的结果是什 ...
转换格式可以用as.list函数,提取数据直接用transnum=(数据框名称)[,1]就可以了,如果还不行可以上传部分数据再转换试一下。

使用道具

藤椅
pumbaashu 发表于 2015-7-16 17:24:27 |只看作者 |坛友微信交流群
转成这样
$cardid
[1] as12e hyy3  yhff
Levels: as12e hyy3 yhff

$termid
[1] tm1 tm2 tm3
Levels: tm1 tm2 tm3

$transnum
[1] 6 3 6

$transrmb
[1] 1000  500  800

还是没有解决需求啊……

使用道具

板凳
meishanjia1900 发表于 2015-7-18 15:52:18 |只看作者 |坛友微信交流群
  1. > a <- data.frame(cardid = c("as12e","hyy3","yhff"),
  2. +                 termid = c("tm1","tm2","tm3"),
  3. +                 transnum = c(6,3,6),
  4. +                 transrmb = c(1000,500,800))
  5. > b1 <- tapply(a[, "transnum"], list(a[, "cardid"], a[, "termid"]), sum)
  6. > b2 <- tapply(a[, "transrmb"], list(a[, "cardid"], a[, "termid"]), sum)
复制代码
好吧,b1,b2就是你想要的东西。如果你想要紧凑一点,将结果直接凑成一个列表输出,也可以直接执行以下代码:
  1. a <- data.frame(cardid = c("as12e","hyy3","yhff"),
  2.                 termid = c("tm1","tm2","tm3"),
  3.                 transnum = c(6,3,6),
  4.                 transrmb = c(1000,500,800))
  5. b <- lapply(a[, 3:4], function(x) {
  6.        y <- tapply(x, list(a[, "cardid"], a[, "termid"]), sum)
  7.        return(replace(y, is.na(y), 0))
  8.      })
  9. print(b)
复制代码
b就是你想要的东西。你知道你的提问帖贴了那么长时间,但回帖人数很少的原因么?

第一,以上两个结果矩阵,左上角应该为空,但你却加了cardid字段,这是引起混乱的做法
第二,最致命的一点,你说你想要得到XXXX这样的结果,可是你给出的样例矩阵,每个都只有两行,除去题头只有一行。你让我们怎么猜你想要的结果是什么样子的呢?

使用道具

报纸
pumbaashu 发表于 2015-7-24 14:08:25 |只看作者 |坛友微信交流群
meishanjia1900 发表于 2015-7-18 15:52
好吧,b1,b2就是你想要的东西。如果你想要紧凑一点,将结果直接凑成一个列表输出,也可以直接执行以下代码: ...
非常感谢您的回复

以后一定谨谆教诲,仔细把问题表达清楚

使用道具

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

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

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

GMT+8, 2024-4-27 00:53