Добавление значений в столбец в R [дубликат]

К сожалению, сегодня нет способа запроса / фильтрации по определенным значениям столбцов. Это определенно то, что мы хотим добавить, и оно включено в дорожную карту.

У вас есть две альтернативы. Один из них - сделать «тупой текстовый поиск», как вы обнаружили. Другой способ - извлечь лист, проанализировать его и определить совпадения локально. Не так элегантно, а больше времени и трудоемко, но является жизнеспособным вариантом.

20
задан neversaint 31 January 2013 в 09:58
поделиться

7 ответов

x <-c(1,2,3)
y <-c(100,200,300)
x_name <- "cond"
y_name <- "rating"

require(reshape2)
df <- melt(data.frame(x,y))
colnames(df) <- c(x_name, y_name)
print(df)

UPDATE (2017-02-07): как ответ на комментарий @cdaringe - возможны несколько решений, один из которых ниже.

library(dplyr)
library(magrittr)

x <- c(1, 2, 3)
y <- c(100, 200, 300)
z <- c(1, 2, 3, 4, 5)
x_name <- "cond"
y_name <- "rating"

# Helper function to create data.frame for the chunk of the data
prepare <- function(name, value, xname = x_name, yname = y_name) {
  data_frame(rep(name, length(value)), value) %>%
    set_colnames(c(xname, yname))
}

bind_rows(
  prepare("x", x),
  prepare("y", y),
  prepare("z", z)
)
11
ответ дан redmode 27 August 2018 в 18:30
поделиться

Alt упрощение https://stackoverflow.com/users/1969435/gx1sptdtda выше:

cond <-c(1,2,3)
rating <-c(100,200,300)
df <- data.frame(cond, rating)
df
  cond rating
1    1    100
2    2    200
3    3    300
1
ответ дан Community 27 August 2018 в 18:30
поделиться

Вы можете использовать функцию expand.grid ().

x <-c(1,2,3)
y <-c(100,200,300)
expand.grid(cond=x,rating=y)
6
ответ дан fhernanb 27 August 2018 в 18:30
поделиться

Хотя этот вопрос не отвечает на заданный вопрос, он отвечает на связанный с ним вопрос, который был у многих людей:

x <-c(1,2,3)
y <-c(100,200,300)
x_name <- "cond"
y_name <- "rating"

df <- data.frame(x,y)
names(df) <- c(x_name,y_name)
print(df)

  cond rating
1    1    100
2    2    200
3    3    300
47
ответ дан fny 27 August 2018 в 18:30
поделиться

Это должно сделать трюк, чтобы создать требуемый фрейм данных, используя только базу R:

df <- data.frame(cond=c(rep("x", times=length(x)), 
                        rep("y", times=length(y))), 
                 rating=c(x, y))

df
  cond rating
1    x      1
2    x      2
3    x      3
4    y    100
5    y    200
6    y    300

Однако, из вашего первоначального описания, я бы сказал, что это, возможно, больше Вероятно, usecase:

df2 <- data.frame(x, y)
colnames(df2) <- c(x_name, y_name)

df2
  cond rating
1    1    100
2    2    200
3    3    300

[изменить: перемещенные скобки в примере 1]

8
ответ дан mightypile 27 August 2018 в 18:30
поделиться

df = data.frame(cond=c(rep("x",3),rep("y",3)),rating=c(x,y))

1
ответ дан statquant 27 August 2018 в 18:30
поделиться

Вот простая функция. Он генерирует кадр данных и автоматически использует имена векторов как значения для первого столбца.

myfunc <- function(a, b, names = NULL) {
  setNames(data.frame(c(rep(deparse(substitute(a)), length(a)), 
                        rep(deparse(substitute(b)), length(b))), c(a, b)), names)
}

Пример:

x <-c(1,2,3)
y <-c(100,200,300)
x_name <- "cond"
y_name <- "rating"

myfunc(x, y, c(x_name, y_name))

  cond rating
1    x      1
2    x      2
3    x      3
4    y    100
5    y    200
6    y    300
3
ответ дан Sven Hohenstein 27 August 2018 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: