У меня возникает следующая ошибка:
a <- system("awk '{ if (/foo/) print "2","\t",$0; else print "1","\t",$0; }' file",intern=true)
Однако я получаю следующую ошибку:
Error: unexpected numeric constant in "a \<- system("awk '{ if (/foo/) print "2"
Мне интересно, нужно ли мне избегать внутренних апострофов, но не знаю, как?!
В коде есть пара ошибок. Код ниже работает для меня и (согласно вашему комментарию) возвращает фрейм данных с двумя столбцами:
a <- system("awk '{ if (/foo/) print 2 \"\t\" $0; else print 1 \"\t\" $0; }' file", intern = TRUE)
DF = read.table(text = a, sep = "\t")
DF
#> V1 V2
#> 1 2 foo
#> 2 1 bar
#> 3 1 asd
summary(DF)
#> V1 V2
#> Min. :1.000 Length:3
#> 1st Qu.:1.000 Class :character
#> Median :1.000 Mode :character
#> Mean :1.333
#> 3rd Qu.:1.500
#> Max. :2.000
Created on 2022-03-23 by the reprex package (v2.0.1)
@zerberus Я изменил ответ, создав в результате фрейм данных с двумя столбцами.
Это действительно полезно. Большое спасибо!
У меня была ошибка с разделителем, и я также хотел сохранить заголовки. Впоследствии я сделал следующее, так как хотел изменить порядок.
file:
Header1 Header2
foo bar
bar bar
foo foo
Затем я выполнил команду:
a <- system("awk '{ if (/foo/) print 2 \"\t\" $0; else print 1 \"\t\" $0; }' file | awk '{print $2,$3,$1}' ", intern = TRUE)
DF = read.table(text = a, sep = " ", header=TRUE)
colnames(DF)[3] <- "Header3"
Теперь вывод:
DF
Header1 Header2 Header3
foo bar 2
bar bar 1
foo foo 2
Все теперь работает отлично. Спасибо
Мне удалось выполнить команду, однако переменная не была прочитана как фрейм данных. Я попробовал следующее.
a <- data.frame(system("awk '{ if (/foo/) print 2 \t $0; else print 1 \t $0; }' file", intern = TRUE))
но файл представляет собой класс символов и режим, а не фрейм данных.summary(a) Length Class Mode 502506 character character