R - как добавить регистры одной переменной в другую (переменные стека) - PullRequest
1 голос
/ 30 марта 2011
var1 var2 var3
   1    2    3
   1    2    3
   1    2    3

Я хочу сложить var2 и var3 под var1, чтобы получить:

var1
   1
   1
   1
   2
   2
   2
   3
   3
   3

Я попытался:

data$var <- append(data$var1,data$var2)

Затем я получаю ошибку, что в моей замене больше строк,Как мне это решить?

Ответы [ 5 ]

4 голосов
/ 30 марта 2011
df <- data.frame(var1=1:3,var2=4:6,var3=7:9)
df2 <- stack(df)
print(df2)

  values  ind
1      1 var1
2      2 var1
3      3 var1
4      4 var2
5      5 var2
6      6 var2
7      7 var3
8      8 var3
9      9 var3
2 голосов
/ 30 марта 2011

Вы можете попробовать unlist:

dtf <- data.frame(a = 1:3, b = 1:3, c = 1:3)
unlist(dtf)
a1 a2 a3 b1 b2 b3 c1 c2 c3 
 1  2  3  1  2  3  1  2  3 
1 голос
/ 30 марта 2011

Ваш вывод имеет другое количество строк для вашего ввода, поэтому попытка превратить последний в первый вызовет проблемы.Просто создайте новый фрейм данных:

df <- data.frame(x = c(df$var1, df$var2, df$var3)

Вы также можете поиграть с do.call, воспользовавшись тем, что фрейм данных представляет собой список под капотом:

df <- data.frame(x = do.call("c", df))
0 голосов
/ 30 марта 2011

Stack кажется здесь очевидным ответом, но melt в пакете reshape работает аналогичным образом и МОЖЕТ предлагать некоторую гибкость в других более сложных ситуациях.Предполагая, что вы работаете с объектом с именем dat:

library(reshape)
melt(dat)

  variable value
1     var1     1
2     var1     1
3     var1     1
4     var2     2
5     var2     2
6     var2     2
7     var3     3
8     var3     3
9     var3     3

Если вам нужно сохранить один из столбцов в качестве переменной ID:

> melt(dat, id.vars = "var1")
  var1 variable value
1    1     var2     2
2    1     var2     2
3    1     var2     2
4    1     var3     3
5    1     var3     3
6    1     var3     3
0 голосов
/ 30 марта 2011

Я предполагаю, что вы получаете эту ошибку, потому что каждый столбец / переменная в кадре данных должен иметь одинаковую длину. Вы можете создать новую более длинную переменную и объединить ее со старым фреймом данных, но он будет повторять данные в других переменных.

> df <- data.frame(var1=1:3,var2=4:6,var3=7:9)
> df
  var1 var2 var3
1    1    4    7
2    2    5    8
3    3    6    9

# join combination of var1/var2 and 'df' dataframe

> data.frame(newvar=c(df$var1,df$var2),df)
  newvar var1 var2 var3
1      1    1    4    7
2      2    2    5    8
3      3    3    6    9
4      4    1    4    7
5      5    2    5    8
6      6    3    6    9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...