我正在从包含数千条记录的.txt文件中读取数据
table1 <- read.table("teamwork.txt", sep ="|", fill = TRUE)
看起来像:
f_name l_name hours_worked code
Jim Baker 8.5 T
Richard Copton 4.5 M
Tina Bar 10 S
但是我只想读入带有'S'或'M'代码的数据:
我试图合并列:
newdata <- subset(table1, code = 'S' |'M')
但是我遇到了这个问题:
仅适用于数字,逻辑或复杂类型的操作
答案 0 :(得分:1)
如果有成千上万的记录(也许不是几百万条记录),则您应该能够在读取所有数据后进行过滤:
> library(tidyverse)
> df %>% filter(code=="S"|code=="M")
# A tibble: 2 x 4
f_name l_name hours_worked code
<fct> <fct> <dbl> <fct>
1 Richard Copton 4.50 M
2 Tina Bar 10.0 S
如果您真的只想提取满足条件的行,请尝试sqldf
软件包,例如此处的示例:How do i read only lines that fulfil a condition from a csv into R?
答案 1 :(得分:0)
您可以尝试
cols_g <- table1[which(table1$code == "S" | table1$code == "M",]
OR
cols_g <- subset(table1, code=="S" | code=="M")
OR
library(dplyr)
cols_g <- table1 %>% filter(code=="S" | code=="M")
如果您想在cols_g
上添加列table1
,则可以使用从这3种方法分配的任何内容中使用table1$cols_g
代替cols_g
。