我是R的初学者。我希望你能帮我解决问题。 我的数据集中有文件名,有很多信息。我必须提取此信息以创建单独的变量。
开始使用
splits <- t(as.data.frame(strsplit(as.character(rawdata_r$File),"_")))
但是当我使用它时,我得到了这个错误:
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : Arguments imply different number of rows: 1, 4, 5, 2
可能是什么问题?感谢您的帮助。
答案 0 :(得分:1)
as.data.frame()
函数抛出了您的错误。 R中的数据帧必须具有相同行数的列。
给出错误消息:strsplit(as.character(rawdata_r$File),"_")
已生成包含1,4,5和2个嵌套元素的列表。这表明rawdata_r$File
是一个因素,您将转换为角色。字符向量的长度为4,元素有0,3,4和1&#34; _&#34;分别在他们身上。也许这些是snake_case中的单词
根据您要使用此对象的内容,我建议您删除对data.frame
的调用以及对t
的调用。如果要使用snake_case命名约定将文件名转换为其单词
请参阅以下示例:
# create an object with similar characteristics
filenames <- factor(c("foo", "foo_bar_baz_fiz", "foo_bar_baz_fiz_buz", "hello_world"))
# generate the error:
splits <- t(as.data.frame(strsplit(as.character(filenames),"_")))
错误(函数(...,row.names = NULL,check.rows = FALSE,check.names = TRUE,: 参数意味着不同的行数:1,4,5,2
# don't generate the error
splits <- strsplit(as.character(filenames), "_")
splits
[[1]]
[1] "foo"
[[2]]
[1] "foo" "bar" "baz" "fiz"
[[3]]
[1] "foo" "bar" "baz" "fiz" "buz"
[[4]]
[1] "hello" "world"
答案 1 :(得分:0)
如果来自File
数据框的OP
列获得了由_
分隔的每一行的固定数量的项目(例如4),则可以找到一个有效的解决方案
tidyr::separate
库(tidyverse)
rawdata_r %>%
mutate(File = as.character(File)) %>%
separate(File, c("Part1", "Part2", "Part3", "Part4"), sep = "_")
上述声明会将File
列中的4
数据划分为Part1, Part2, Part3, Part4