我有一个大的数据表,其中某些参数被测量,
1.没有特定的一面(我称之为“NoSide”),
1.左右两边都有。
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
的任何建议?谢谢!
3条答案
按热度按时间zqdjd7g91#
字符串
wlp8pajw2#
虽然我不明白为什么你要这样重塑数据,但你可以通过首先重塑为wide,然后去掉
NA
列,最后重新排序和重命名来实现你想要的结果:字符串
mbyulnm03#
这是另一个版本:
字符串