2013-12-20 122 views
1

我的问题是数据存储在列名称中。 NAME_X_Y_OTHER。我需要将多个列合并为一个,但我需要保留XY值。R数据框,按名称组合列并创建新列

原始数据看起来像这样。

my_df <- data.frame(MISC=c("a","a","b"), 
       NAME_10_03_OTHER=c(1,2,3), 
       NAME_10_04_OTHER=c(4,5,6), 
       NAME_11_04_OTHER=c(7,8,9)) 


    MISC NAME_10_03_OTHER NAME_10_04_OTHER NAME_11_04_OTHER 
1 a    1    4    7 
2 a    2    5    8 
3 b    3    6    9 

我想将其转换为此。

my_new_df <- data.frame(MISC=c("a","a","b","a","a","b","a","a","b"), 
        NAME_OTHER=c(1,2,3,4,5,6,7,8,9), 
        x=c(10,10,10,10,10,10,11,11,11), 
        y=c(3,3,3,3,3,3,4,4,4)) 
    MISC NAME_OTHER x y 
1 a   1 10 3 
2 a   2 10 3 
3 b   3 10 3 
4 a   4 10 3 
5 a   5 10 3 
6 b   6 10 3 
7 a   7 11 4 
8 a   8 11 4 
9 b   9 11 4 

我可以c(t(my_df))结合列,但我失去了XY值。

回答

1
my_df <- data.frame(MISC=c("a","a","b"), 
        NAME_10_03_OTHER=c(1,2,3), 
        NAME_10_04_OTHER=c(4,5,6), 
        NAME_11_04_OTHER=c(7,8,9)) 
#require(reshape2) 
mydf2<-melt(my_df) 
mydf2$x=as.numeric(unlist(lapply(strsplit(as.character(mydf2$variable),"_", fixed=T),"[[",2))) 
mydf2$y=as.numeric(unlist(lapply(strsplit(as.character(mydf2$variable),"_", fixed=T),"[[",3))) 

mydf2

MISC   variable value x y 
1 a NAME_10_03_OTHER  1 10 3 
2 a NAME_10_03_OTHER  2 10 3 
3 b NAME_10_03_OTHER  3 10 3 
4 a NAME_10_04_OTHER  4 10 4 
5 a NAME_10_04_OTHER  5 10 4 
6 b NAME_10_04_OTHER  6 10 4 
7 a NAME_11_04_OTHER  7 11 4 
8 a NAME_11_04_OTHER  8 11 4 
9 b NAME_11_04_OTHER  9 11 4 
+0

感谢。这做我需要的一切。 – SethB

1

您可以使用下面的代码:

s = "NAME_10_03_OTHER" 
s1 = unlist(strsplit(s, split='_', fixed=TRUE))[2] 
s2 = unlist(strsplit(s, split='_', fixed=TRUE))[3]