我有一个包含22.388行的.csv文件,其中包含逗号分隔的数字。我想单独找到每一行数字对的所有可能组合,并将它们列为配对,这样我就可以将它们视觉表示为簇。
我文件中的两行示例
“2,13”
“2,8,6”
当我使用str()函数时,R表示该文件包含因子。我想它需要是整数,但我需要将行分开,因此我将每一行包裹在“”中。
我希望像这样对每行的对可能组合。
2,13
2,8
2,6
8,6
我已经从@flodel那里得到了答案
示例输入 - 将textConnection(...)替换为csv文件名。
csv <- textConnection("2,13
2,8,6")
这将输入读入值列表:
input.lines <- readLines(csv)
input.values <- strsplit(input.lines, ',')
这会创建一个嵌套的对列表:
pairs <- lapply(input.values, combn, 2, simplify = FALSE)
This puts everything in a nice matrix of integers:
pairs.mat <- matrix(as.integer(unlist(pairs)), ncol = 2, byrow = TRUE)
pairs.mat
但我需要该函数单独运行我的.csv文件中的每一行,所以我认为我需要使用该函数进行for循环 - 我无法理解它。
提前致谢。
答案 0 :(得分:0)
不确定你到底发生了什么,但也许是这样的:
dat <- readLines(n=2) #read in your data
2, 13
2, 8, 6
## split each string on "," and then remove white space
## and put into a list with lapply
dat2 <- lapply(dat, function(x) {
as.numeric(gsub("\\s+", "", unlist(strsplit(x, ","))))
})
## find all combinations using outer with outer (faster
## than expand.grid and we can take just a triangle)
dat3 <- lapply(dat2, function(x) {
y <- outer(x, x, paste)
c(y[upper.tri(y)])
})
## then split on the spaces and convert back to numeric
## stored as a list
lapply(strsplit(unlist(dat3), " "), as.numeric)
## > lapply(strsplit(unlist(dat3), " "), as.numeric)
## [[1]]
## [1] 2 13
##
## [[2]]
## [1] 2 8
##
## [[3]]
## [1] 2 6
##
## [[4]]
## [1] 8 6