如何将每三行转换为R或linux中的列

Ras*_*lam 1 bash r

我的意见是:

"name_01"
"name_02"
 0.000573033 0.001268718  0.45 6.5e-01
"name_03"
"name_04"
 0.00343343 0.0012435358  0.33 7.5e-09`
Run Code Online (Sandbox Code Playgroud)

tsv中的预期输出:

"name_01"    "name_02"    0.0005    0.0019    0.45    6.5e-01
"name_03"    "name_04"    0.0034    0.0012    0.33    7.5e-09
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助R或Linux吗?

G. *_*eck 5

假设这个输入:

s <- '"name_01"
"name_02"
 0.000573033 0.001268718  0.45 6.5e-01
"name_03"
"name_04"
 0.00343343 0.0012435358  0.33 7.5e-09'
Run Code Online (Sandbox Code Playgroud)

1)使用what列表读取它并multi.line=TRUE扫描产生列表的参数L; 设置其名称并转换为data.frame:

L <- scan(textConnection(s), what = list("", "", 0, 0, 0, 0), 
       multi.line = TRUE, quiet = TRUE)
names(L) <- paste0("V", seq_along(L))
do.call(data.frame, c(L, stringsAsFactors = FALSE))
Run Code Online (Sandbox Code Playgroud)

赠送:

       V1      V2          V3          V4   V5      V6
1 name_01 name_02 0.000573033 0.001268718 0.45 6.5e-01
2 name_03 name_04 0.003433430 0.001243536 0.33 7.5e-09
Run Code Online (Sandbox Code Playgroud)

2) 这个替代方案也使用扫描而不是使用扫描what,list我们将自己重塑为矩阵,将其转换为data.frame并将最后4列数字化.如果您的输入实际来自文件替换textConnection(s)为"myfile.txt"之类的内容.请注意,第一行代码中的6表示要创建的列数,最后一行代码中的3:6表示要转换为数字的列号.

d <- as.data.frame(matrix(scan(textConnection(s), what = ""),, 6, byrow = TRUE),
       stringsAsFactors = FALSE)
d[3:6] <- lapply(d[3:6], as.numeric)
Run Code Online (Sandbox Code Playgroud)

赠送:

> d
       V1      V2          V3          V4   V5      V6
1 name_01 name_02 0.000573033 0.001268718 0.45 6.5e-01
2 name_03 name_04 0.003433430 0.001243536 0.33 7.5e-09
Run Code Online (Sandbox Code Playgroud)

3) 这是另一种方法.我们读入数据,选出表示第一个结果列的数据,然后选择第二个结果列,然后重新读取它,将双引号设置为注释字符,以便省略输入的名称行.

L <- readLines(textConnection(s))
data.frame(Name1 = L[c(TRUE, FALSE, FALSE)], Name2 = L[c(FALSE, TRUE, FALSE)],
 read.table(text = L, comment = '"'))
Run Code Online (Sandbox Code Playgroud)

赠送:

     Name1     Name2          V1          V2   V3      V4
1 "name_01" "name_02" 0.000573033 0.001268718 0.45 6.5e-01
2 "name_03" "name_04" 0.003433430 0.001243536 0.33 7.5e-09
Run Code Online (Sandbox Code Playgroud)

更新 添加了其他解决方案,进行了一些小的改进并添加了说明.