为csv中的每一行循环一个函数

时间:2013-05-09 13:43:40

标签: r for-loop

我有一个包含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循环 - 我无法理解它。

提前致谢。

1 个答案:

答案 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