在R中,我需要读取制表符分隔的文本文件,但只读取第1列(字符串)等于特定字符串的行。我被告知我可以使用with()
函数执行此操作,但无法完成此操作。我可以在2个语句中执行此操作,但我需要使用with()
在1中执行此操作。
以下是我使用这两个语句完成的方法:
dF <- read.table(file, header=TRUE, sep="\t", na='-999')
dF <- subset(dF,dF$C1=="value")[,-1]
由于我在第1列上进行过滤,因此我也将在新数据框中删除它。
这可以在一个with()
函数中执行吗?如果是这样,我还可以在同一个表达式中显示结果吗?索引会有帮助吗?我无法弄清楚如何使索引工作。
提前谢谢!
答案 0 :(得分:-1)
bundle exec rails g controller Welcome index
您可以使用隐式dF <- read.table(file, header=TRUE, sep="\t", na='-999')
dF <- dF[dF$C1=="value",]
语句。 R允许用户通过指定dt [i,j]中的哪些行或列来对data.frame进行子集化。
答案 1 :(得分:-1)
当你坚持使用基础R时,我不建议尝试将过多的活动压缩到一行:阅读文本文件并处理数据是两个独立的活动,保持有意义如果你想要可读代码,它们会分开。
如果您确实希望保持代码紧密,并且希望将两行合并为一个,我建议使用dplyr
包,它具有一个很小的功能,称为管道%>%
。这将允许您将一行代码分解为可读块:
library(dplyr)
dF = read.table(file, header=TRUE, sep="\t", na='-999') %>% filter(C1 == "value") %>% select(-C1)
这里再次写出几行:
dF = read.table(file, header=TRUE, sep="\t", na='-999') %>%
filter(C1 == "value") %>% # take only the rows where C1 is "value"
select(-C1) # remove the C1 column
答案 2 :(得分:-1)
感谢您的帮助!我已经得出结论,我无法读取AND子集1命令,所以我从前一个数据帧中进行了子集化。这就是我最终得到的结果:
newDf <- with(Df,Df[Df$C1=='value',-1])
我想是另一种分组方式。 R似乎有很多方法可以获得相同的结果。非常有趣的节目!
再次感谢,全部!