我的数据框包含2列,filename
和monitorid
。
filename monitorid
1 001.csv 1
2 002.csv 2
3 003.csv 3
4 004.csv 4
5 005.csv 5
6 006.csv 6
我正在尝试分组,以便为给定的filename
选择monitorid
filename <- files[files$monitorid==3,1]
我希望这会返回&#34; 003.csv&#34;
Instread it return
[1] 003.csv
6 Levels: 001.csv 002.csv 003.csv 004.csv 005.csv 006.csv
然而
filename <- files[files$monitorid==3,2] returns
[1] 3
按预期
我不明白为什么选择第1列会返回具有多个级别的因子,而第2列会返回单个值。
非常感谢任何想法。
@KenM 这是我用来读取文件名
的函数getfileinfo <- function (directory){
## Reads file names into filenames variable
filenames <- list.files (path = directory)
## assigns monitorids to each file name
monitorid <- as.numeric(substr(filenames,1,3))
##combines filenames and monitorid into data frame, files
files <- data.frame(filenames, monitorid)
names(files) <- c("filename","monitorid")
return(files)
}
解决方案
这里是每行的输出
filenames <- list.files (path = directory)
class(filenames)
[1] "character"
monitorid <- as.numeric(substr(filenames,1,3))
class(monitorid)
[1] "numeric"
files <- data.frame(filenames, monitorid)
sapply (files, class)
filenames monitorid
"factor" "numeric"
正如KenM和BeginneR在组合成数据框时所指出的那样,字符向量文件名成为数据类因子列
更正后的代码
files <- data.frame(filenames, monitorid, stringsAsFactors = FALSE)
sapply (files, class)
filenames monitorid
"character" "numeric"
答案 0 :(得分:1)
我不明白为什么选择第1列会返回具有多个级别的因子,而第2列会返回单个值。
你得到因素,因为你加载了“filename”列作为因子,而(我想)你想要一个字符串/字符作为“filename”对象的值。
解决方案是: 1.加载csv文件时,请将值读取为字符而不是因子;要么 2.将因子转换为字符。
对于解决方案1,在colClasses = "character
中设置read.csv()
(请参阅?read.csv
)
对于解决方案2,请执行filename <- as.character(files[files$monitorid==3,1])
(顺便说一句,请在提问时附上一个可重现的例子)