У меня есть df,
df <- data.frame(X1 = c('1','0', '1','1', '1'), X2 = c('1','0', '1','0', '1'), X3 = c('1','0', '1','0', '1'), X4 = c('1','0', '1','0', '1'))
И я хотел бы создать несколько тестовых наборов по столбцам, которые говорят:
'1 & 0 & 1 & 1 & 1'
И так для каждой строки. Мой ожидаемый результат:
df <- data.frame(X1 = c('1','0', '1','1', '1'), X2 = c('1','0', '1','0', '1'), X3 = c('1','0', '1','0', '1'), X4 = c('1','0', '1','0', '1'), tc= c("1 & 1 & 1 & 1", "0 & 0 & 0 & 0", "1 & 1 & 1 & 1", "1 & 0 & 0 & 0", "1 & 1 & 1 & 1"))
Я не уверен, что это самый простой способ сделать это. Но я создаю строку с noquote, toString и lapply:
string <- noquote(toString(lapply(1:3, function(x){noquote(sprintf("df$X%s, '&'", x))})))
string
#df$X1, '&', df$X2, '&', df$X3, '&'
И пытаюсь активировать ее с помощью paste
df$tc <- paste(string, df$X4)
Однако он вставляет только последнее значение из X4, заставляя мои тестовые примеры выглядеть например:
head(df$tc)
[1] "df$X1, '&', df$X2, '&', df$X3, '&' 1" "df$X1, '&', df$X2, '&', df$X3, '&' 0"
[3] "df$X1, '&', df$X2, '&', df$X3, '&' 1" "df$X1, '&', df$X2, '&', df$X3, '&' 0"
[5] "df$X1, '&', df$X2, '&', df$X3, '&' 1"
Единственное решение, которое я нашел, - скопировать созданную мной строку в оператор вставки
df$tc <-paste(df$X1, '&', df$X2, '&', df$X3, '&', df$X4)
Однако это выглядит не очень хорошо, и иногда у меня есть больше чем 100 тестовых случаев и очень длинная строка.
Есть ли способ вставить результаты вот так;
df$tc <- paste(string, df$X4)
Или есть более умный подход?
Заранее спасибо!