很抱歉,如果这是一个重复的问题,但是我环顾了类似的问题,却找不到真正的解决方案。无论如何,这里是这样:
我已将.csv文件读入表中。我正在处理3列:“ ID”(作者的ID),“ num_pub”(已发表的文章数)和“年”(1930年至2017年的跨度)。
我想获得一个最终表,其中每个“年份”和每个“ ID”都有“ num_pub”。因此,行将是“ ID”,列将是“ year”,并且在每年的下面都有相应的“ num_pub”或0(如果作者未发布任何内容)。
我尝试创建两个新表并以此处描述的几种不同方式合并它们,但无济于事。
所以首先我将文件读入表中: tab<-read.table("mytable.csv",sep=",",head=T,colClasses=c("character","numeric","factor"))
head(tab,10) ID num_pub year 1 00002 1 1977 2 00002 2 1978 3 00002 1 1983 4 00002 4 1984 5 00002 3 1990 6 00002 1 1994 7 00002 2 1996 8 00004 3 1957 9 00004 1 1958 10 00004 1 1959
这样,我便可以创建一个表,其中每个“ ID”都有一个单独的“年份”,如果作者在该年发布,则该值为1,否则为0: a<-table(tab[,1], tab[,3])
调用head(a,1)
返回下表:pic
我想知道如何达到上述期望的结果。即,有一个表,其中的行将填充“ ID”,列将填充“ year”(从1930年到2017年),并且在每年的下面都有一个实际的“ num_pub”值或0值。表格的结构就像图片中所示的一样
感谢您的时间和帮助。我是R的新手,因此被卡在泥泞中。
编辑:这里介绍的重塑方法不能解决我的问题。我需要用零代替“ NA”,我希望我的年份从1930年开始,而不是作者发表的第一年。
使用reshape2
&dcast
one可以更改为宽格式,然后通过管道将NA
s替换为0。
library(reshape2)
library(dplyr)
dcast(tab, ID~year, value.var = "num_pub") %>%
replace(is.na(.), 0)
ID 1957 1958 1959 1977 1978 1983 1984 1990 1994 1996
1 00002 0 0 0 1 2 1 4 3 1 2
2 00004 3 1 1 0 0 0 0 0 0 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句