我有一个很大的数据表,其中的某些参数是在
- 没有特别的一面(我称它们为"NoSide")或
- 左右两边都有.
myinput <- data.frame(Parameter=letters[1:10], NoSide=c(NA,NA,NA,1,3,3,2,0,1,NA), Right=c(2,3,1,NA,NA,NA,NA,NA,NA,1), Left=c(0,1,4,NA,NA,NA,NA,NA,NA,2))
> myinput
Parameter NoSide Right Left
1 a NA 2 0
2 b NA 3 1
3 c NA 1 4
4 d 1 NA NA
5 e 3 NA NA
6 f 3 NA NA
7 g 2 NA NA
8 h 0 NA NA
9 i 1 NA NA
10 j NA 1 2
我希望数据以宽的形式显示如下,因为在这个特定的例子中,右侧和左侧的测量值是不应该集中在一起的离散值:
myheaders = c("a_Right","a_Left","b_Right","b_Left","c_Right","c_Left","d","e","f","g","h","i","j_Right","j_Left")
mydata = c(2,0,3,1,1,4,1,3,3,2,0,1,1,2)
myoutput = as.data.frame(t(mydata))
colnames(myoutput) <- myheaders
myoutput
> myoutput
a_Right a_Left b_Right b_Left c_Right c_Left d e f g h i j_Right j_Left
1 2 0 3 1 1 4 1 3 3 2 0 1 1 2
基本上,NoSide、Right和Left列的内容是从左到右读取的,并以宽的形式列出,同时省略了"na"值.应该根据值是否派生自"NoSide"、"Right"或"Left"列(理想情况下名称中没有"NoSide")来创建新的列名.
你有什么建议可以把myinput
转换成myoutput
的最简单的方法吗?谢谢!