1 つのオプションは a を使用することですlist
(ただし、この場合は長いデータ形式の方が便利で、データはそれほど大きくないと思います)。
data.frame
あなたが「mydf」と呼ばれると仮定します:
## Create a matrix to subset each pair of columns
mat <- matrix(1:4, ncol = 2, byrow = TRUE)
## use `lapply` to subset and remove the offensive rows
lapply(sequence(nrow(mat)), function(x) {
temp <- mydf[mat[x, ]]
temp[temp[2] != 0, ]
})
# [[1]]
# Col_names1 Col_values1
# 1 a 98.00
# 2 b 12.00
# 4 e 0.12
#
# [[2]]
# Col_names2 Col_values2
# 1 f 1.0
# 2 h 0.8
@dayneの回答に基づいて、列に通常のパターンで名前が付けられている場合、reshape
非常に効果的に使用して長い形式を取得できます。ただし、「id」変数が必要です(sequence(nrow(DF))
必要があります)。
例:
### Sample data
set.seed(1)
DF <- data.frame(col_names1 = sample(letters[1:13], 30, replace=TRUE),
col_values1 = sample(0:10, 30, replace=TRUE),
col_names2 = sample(letters[14:26], 30, replace=TRUE),
col_values2 = sample(0:10, 30, replace=TRUE))
### Add the ID
DF <- cbind(id = 1:nrow(DF), DF)
### Reshape the data into a long form
out <- reshape(DF, direction = "long", idvar="id",
varying = setdiff(names(DF), "id"), sep = "")
### Subset
out2 <- out[out$col_values != 0, ]
head(out2)
# id time col_names col_values
# 1.1 1 1 d 5
# 2.1 2 1 e 6
# 3.1 3 1 h 5
# 4.1 4 1 l 2
# 5.1 5 1 c 9
# 6.1 6 1 l 7