2017-02-06 3 views
1
df <- data.frame(x=c(1,2,1,2,3,3), y = c(letters[1:5],'a'), val = c(1:5, 9)) 
print(df) 
    x y val 
    1 a 1 
    2 b 2 
    1 c 3 
    2 d 4 
    3 e 5 
    3 a 9 

Я хочу создать функцию fun(df, rowname, colname, valname), которая принимает dataframe, rowname, ColName и входы значений и возвращает data.frame или матрицу с именами строк, имена столбцов и значения как нижереорганизовать data.frame в табулирования значений

fun(df, "x","y","val") should return 

    1 2 3 
a 1 NA 9 
b NA 2 NA 
c 3 NA NA 
d NA 4 NA 
e NA NA 5 
+0

Посмотрите на пакет reshape2, функция '' cast' и melt' может быть то, что вы ищете. – Bastien

+0

библиотека (dplyr); spread (df, x, val) – user127649

ответ

1

reshape2 библиотеки позволяет такого рода манипуляции:

library(reshape2) 

dcast(data=df, y~x, value.var = "val") 

    y 1 2 3 
1 a 1 NA 9 
2 b NA 2 NA 
3 c 3 NA NA 
4 d NA 4 NA 
5 e NA NA 5 
+1

С базой R 'reshape':' reshape (df, direction = "wide", idvar = "y", timevar = "x") '. – lmo

Смежные вопросы