Основной вопрос R по манипулированию фреймами данных - PullRequest
2 голосов
/ 01 сентября 2010

У меня есть фрейм данных с несколькими столбцами.строки имеют имена.

Я хочу вычислить некоторое значение для каждой строки (col1/col2) и создать новый фрейм данных с исходными именами строк.Если я просто сделаю что-то вроде data$col1/data$col2, я получу вектор с результатами, но потеряю имена строк.

Я знаю, что это очень просто, но я совсем новичок в R.

Ответы [ 3 ]

4 голосов
/ 01 сентября 2010

Было бы полезно прочитать ?"[.data.frame", чтобы понять, что происходит.В частности:

Обратите внимание, что для '$' нет метода data.frame, поэтому в 'x $ name' используется метод по умолчанию, который обрабатывает 'x' как список.

Вы увидите, что имена объектов будут утеряны, если вы преобразуете data.frame в список (используя пример данных Joris):

> as.list(Data)
$col1
 [1] -0.2179939 -2.6050843  1.6980104 -0.9712305  1.6953474  0.4422874
 [7] -0.5012775  0.2073210  1.0453705 -0.2883248

$col2
 [1] -1.3623349  0.4535634  0.3502413 -0.1521901 -0.1032828 -0.9296857
 [7]  1.4608866  1.1377755  0.2424622 -0.7814709

Я бы рекомендовал избегать использования $ если вы хотите сохранить имена строк.Используйте это вместо:

> Data["col1"]/Data["col2"]
         col1
a   0.1600149
b  -5.7435947
c   4.8481157
d   6.3816918
e -16.4146120
f  -0.4757387
g  -0.3431324
h   0.1822161
i   4.3114785
j   0.3689514
2 голосов
/ 01 сентября 2010

используйте имена функций () для добавления имен:

Data <- data.frame(col1=rnorm(10),col2=rnorm(10),row.names=letters[1:10])
x <- Data$col1/Data$col2
names(x) <- row.names(Data)

Это решение дает вектор с именами.Чтобы получить фрейм данных (решение от Marek ):

NewFrame <- data.frame(x=Data$col1/Data$col2,row.names=row.names(Data))
0 голосов
/ 21 апреля 2017

Очень простой и удобный способ - использовать row.names (фрейм данных), чтобы сохранить его в виде столбца и далее манипулировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...