2016-06-13 3 views
2

Мой dataframeСоздание строки из dataframe

x1 <- data.frame(C1 = letters[1:4], C3=1:4, C3=letters[11:14]) 

мне нужно что-то список, где каждый listelement два значения из ряда

x2 <- list(c("a", "1"), c("b", "2"), c("c", "3"), c("d", "4")) 

В основном каждые два значения из строки должны быть listelement так что я могу обработать их позже!

Я попытался

lapply(X = x2, MARGIN = 1, FUN = paste, collapse = "") 

Но это не дает мне желаемый результат!

+0

разбиваться (as.matrix (x1 [1: 2]), seq_len (nrow (x1))) 'Я думаю. Тем не менее, это странная операция. – Frank

+0

@Frank Почему это странная операция? Ваш код дает мне '[1]" b "" 2 "'. Мне нужно '[1]« b2 »' – Stophface

+0

Хм, теперь я действительно смущен, потому что ваш вопрос на самом деле говорит: «Мне нужно что-то [...]' c ("b", "2") '", предположительно описывающее желаемый результат , В любом случае, это странная операция: (i) использовать числа, сохраненные в виде строк, и (ii) разделить data.frame по строкам. Как правило, такие шаги не нужны в R. – Frank

ответ

3

Это то, что вы хотите?

paste0(x1[,1], x1[,2]) 
# [1] "a1" "b2" "c3" "d4" 

Как насчет:

as.list(paste0(x1[,1], x1[,2])) 
# [[1]] 
# [1] "a1" 
# 
# [[2]] 
# [1] "b2" 
# 
# [[3]] 
# [1] "c3" 
# 
# [[4]] 
# [1] "d4" 

Это не имеет значения, сколько строк у вас есть. Вам просто нужно указать столбцы, которые вы хотите вставить в строку.

+0

Почти. Мне нужно это в списке. Я также не знаю, насколько большой мой фреймворк. Может быть, он имеет 1000 строк, может быть, только 2. Я знаю только, какие колоды я хочу преобразовать! – Stophface

1

Вот метод, использующий lapply:

lapply(1:nrow(x1), function(i) c(x1[i,1], x1[i,2])) 

В результате

[[1]] 
[1] "a" "1" 

[[2]] 
[1] "b" "2" 

[[3]] 
[1] "c" "3" 

[[4]] 
[1] "d" "4" 

данные

x1 <- data.frame(C1 = letters[1:4], C3=1:4, C3=letters[11:14], 
       stringsAsFactors = F) 

Обратите внимание, что я использовал stringsAsFactors = F аргумент для построения данные. Если бы я этого не сделал, то C1 и C3 были бы факторами, поэтому мне пришлось бы обернуть x[i, 1] в as.character.

1

Если существует несколько столбцов, мы можем использовать do.call

as.list(do.call(paste0, x1[-3])) 
+0

Здесь смысл только в том, что он позволяет вам вводить меньше 'x1 []' s? – gung

+0

@gung Точка, когда есть «несколько столбцов» – akrun

+0

FWIW, это не предназначалось как snark. Я просто спрашиваю о добавлении стоимости 'do.call'. – gung

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