把一个数据框变成r语言 矩阵 数据框后,为什么数值变了

苹果/安卓/wp
积分 1914, 距离下一级还需 311 积分
权限: 自定义头衔, 签名中使用图片, 隐身, 设置帖子权限
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发, 提升卡下一级可获得
权限: 设置回复可见道具: 沉默卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 2 天连续签到: 1 天[LV.1]初来乍到
我的数据包含用户id,每个用户每周登陆的次数,以及用户在第几周流失(为流失则为Inf),如下id wk1 wk2 wk3 wk4 wk5 wk6 lost
c1 4 5 4 3 2 1 Inf
c2 5 4 3 2 1 0 6
c3 4 3 2 1 0 0 5
c4 5 2 1 4 0 0 4
希望从这里取出流失前3周的每周登陆数据,类似这样
id wkl3 wkl2 wkl1 lost
c1 3 2 1 Inf
c2 3 2 1 6
c3 3 2 1 5
c4 2 1 4 4
我现在的办法是两层循环,内层j in 1:3,外层按1:nrow跑一遍,代码不好看,效率极其低,求高效的思路啊
密码被盗??
先将inf& & 等价于7& & 然后中间三列就等于lost的前三周数据
是什么给了你自信
本帖最后由 马甲1号 于
13:21 编辑
testdata=data.frame(id=c('C1','C2','C3','C4'), wk1=c(4,5,4,5), wk2=c(5,4,3,2), wk3=c(4,3,2,1), wk4=c(3,2,1,4), wk5=c(2,1,0,0), wk6=c(1,0,0,0), lost=c(Inf, 6,5,4))
library(reshape2)
test.melt=melt(testdata[!is.infinite(testdata$lost),])
temp=merge(test.melt[test.melt$variable!='lost',], test.melt[test.melt$variable=='lost',], by='id')
temp$weeknum = as.numeric(gsub('wk','',temp$variable.x))
temp = temp[temp$value.y-temp$weeknum & 4 & temp$value.y-temp$weeknum &=1,]
temp$variable.z=paste('wkl', temp$value.y-temp$weeknum, sep='')
dcast(temp[c('id','value.x','variable.z')], id~variable.z, value.var = 'value.x')复制代码
有个问题是Inf的情况没处理.
ps: 论坛对美元号转义了?(latex的副作用)? 怎样禁用latex解析, 还原\$符号?
热心帮助其他会员
总评分:&经验 + 36&
论坛币 + 36&
学术水平 + 3&
热心指数 + 3&
信用等级 + 3&
归欤!归欤!吾党之小子狂简,斐然成章,不知所以裁之。
options(stringsAsFactors=F)
x=data.frame(id=c(&c1&,&c2&,&c3&,&c4&),wk1=c(4,5,4,5),wk2=5:2,wk3=4:1,wk4=c(3:1,4),wk5=c(2,1,0,0),wk6=c(1,0,0,0),lost=c(Inf,6,5,5))
p=matrix(,nc=5,nr=4)
p[,1]=x[,1];p[,5]=x[,8]
colnames(p)=c(&id&,&wkl3&,&wkl2&,&wkl1&,&lost&)
x[,8][grep(&Inf&,x[,8])]=7& && &&&#Inf&&to& &7
t= mapply(&:&,x[,8]-3,x[,8]-1)& &#lost前三周的周数&&每列为每个id所选取的周数
p[,2:4]=t(sapply(1:4,function(i) as.numeric(x[i,t[,i]+1])))& &
as.data.frame(p)复制代码
热心帮助其他会员
总评分:&经验 + 36&
论坛币 + 36&
学术水平 + 3&
热心指数 + 3&
信用等级 + 3&
是什么给了你自信
马甲1号 发表于
有个问题是Inf的情况没处理.
ps: 论坛对美元号转义了?(latex的副作用)? 怎样禁用latex解析, 还原\$符 ...谢谢!代码没太看懂但是想法理解了,是melt,cast的办法吧?很有启发啊!
密码被盗??
yywan0913 发表于
我也来个谢谢!
mapply。。。这个玩意我之前就没弄明白怎么回事,希望这次能看懂
密码被盗??
首先,你这数据对每个id只有6周的数据?并且用户一旦流失(某个wk值为0)就再也不会回来了?
如果是的话,你的问题就简单了,我这里随便写了下,就是求每行第一次出现0的那个位置的前3个数,很简单for (i in 1:nrow(d)){
&&if (length(which(d[i,]==0)) & 0){
& & d$last1[i] &- d[i,which(d[i,]==0)-1]
& & d$last2[i] &- d[i,which(d[i,]==0)-2]&&
& & d$last3[i] &- d[i,which(d[i,]==0)-3]
&&}
&&else{
& & d$last1[i] &- d[i,&wk6&]
& & d$last2[i] &- d[i,&wk5&]&&
& & d$last3[i] &- d[i,&wk4&]& &
&&}
}复制代码
playmore邀请您访问ChinaTeX论坛!!!
playmore 发表于
首先,你这数据对每个id只有6周的数据?并且用户一旦流失(某个wk值为0)就再也不会回来了?
如果是的话 ...谢谢哈,
其实我的数据几十万行,有上百周(列),流失的判定是连续4周为0。。。。
所以我是求高效率计算的办法的,抱歉描述不够清楚
密码被盗??
初级学术勋章
初级学术勋章
初级热心勋章
初级热心勋章
中级热心勋章
中级热心勋章
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师R语言中怎样将数据框转换成矩阵?_百度知道
R语言中怎样将数据框转换成矩阵?
我有更好的答案
用as.matrix, 如果数据类型都相符& help(as.matrix)& t&-read.delim(&t.txt&, header=T)& tt1 t21 1 22 15 33& aMat&-as.matrix(t)& aMatt1 t2[1,] 1 2[2,] 15 33& class(aMat)[1] &matrix&
采纳率:92%
来自团队:
queen7x7mat1=read.table(file = &queen7x7mat.csv&, sep = &,&,header=TRUE) queen7x7mat1=as.matrix(queen7x7mat1,header=FALSE)晕,你们看一看as.matrix之后变成了字符串,chr?
用as.matrix()函数即可。
首先要保证数据框中数据是同一类型的,然后as.matrix()
as.matrix就可以啦~~~
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
r语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。R中怎么把factor类型的数据框转成数值型的数据框_百度知道
R中怎么把factor类型的数据框转成数值型的数据框
我有更好的答案
as.matrix(data)就行了。不过矩阵里面所有元素必须是同样类型的,也就是说按你的要求做了之后矩阵里所有元素都是字符串。
采纳率:91%
来自团队:
为您推荐:
其他类似问题
factor的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。整列数据如何转换成矩阵_百度知道
整列数据如何转换成矩阵
我有更好的答案
然后按如下操作:选择该列的前N个数据,将其“复制”到剪贴板。再单击矩阵第一行的第一个单元格,然后从“编辑”菜单中执行“选择性粘贴”命令,在弹出的对话框中选择“转置”复选框,最后再单击“确定”按钮即把前N数据转换成了矩阵的第一行。接下来再选择该列中的下一组N个数据,执行“复制”。再将光标定位到矩阵的第二行的第一个单元格,执行“转置”操作。这样经过M次的“转置”后就把数据全部转换为矩阵形式了。
采纳率:70%
为您推荐:
其他类似问题
列数据的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。苹果/安卓/wp
积分 461, 距离下一级还需 339 积分
权限: 自定义头衔, 签名中使用图片
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡, 匿名卡, 抢沙发下一级可获得
权限: 隐身
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 16 天连续签到: 1 天[LV.4]偶尔看看III
a&-c(1:12)
b&-matrix(a,3,4)
& &&&[,1] [,2] [,3] [,4]
[1,]& & 1& & 4& & 7& &10
[2,]& & 2& & 5& & 8& &11
[3,]& & 3& & 6& & 9& &12
怎么逆转,就是怎么由a_mat变为a,有没有对应的函数?
十分感谢!
&img src=&stati ...
键入函数as.numeric(a_mac)即可成功。变成了一串数值!!!
as.vector(b)
dim(b)=NULL
# [1]&&1&&2&&3&&4&&5&&6&&7&&8&&9 10 11 12
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师

我要回帖

更多关于 r 矩阵变成数据框 的文章

 

随机推荐