가 여기에 또 다른 대안이다. @ Matthew의 대답에서 "x"를 사용하면 strtim
을 사용하여 이름에서 카테고리를 만들고 집계 할 카테고리에 sapply
을 사용할 수 있습니다. 고전이, 마지막으로
mymatch <- strtrim(names(mydf), 3)[-1]
cbind(mydf[1],
sapply(unique(mymatch),
function(y) rowSums(mydf[-1][, mymatch == y, drop = FALSE])))
# Class1 0.4 0.5 0.6
# 1 DAWO 5 0 8
# 2 DRWO 6 3 1
# 3 DHWO 3 0 0
:
mymatch <- strtrim(names(x), 3)
sapply(unique(mymatch), function(y) rowSums(x[, mymatch == y, drop = FALSE]))
# 0.4 0.5 0.6
# DAWO 5 0 8
# DRWO 6 3 1
# DHWO 3 0 0
또는 원래의 데이터를 사용하여, 당신은 단지 rowSums
을 복용 할 때 "클래스 1"열을 드롭 기억에 대해 조금주의해야 melt
및 *cast
포함 "reshape2"접근 : 마지막 두 가지 예를 들어
> library(reshape2)
> Stacked <- melt(mydf)
Using Class1 as id variables
> dcast(Stacked, Class1 ~ strtrim(variable, 3), fun.aggregate=sum)
Class1 0.4 0.5 0.6
1 DAWO 5 0 8
2 DHWO 3 0 0
3 DRWO 6 3 1
을 mydf
은 다음과 같이 정의됩니다.
mydf <- structure(list(Class1 = structure(c(1L, 3L, 2L), .Label = c("DAWO",
"DHWO", "DRWO"), class = "factor"), `0.438` = c(2L, 1L, 1L),
`0.441` = c(2L, 1L, 2L), `0.442` = c(0L, 3L, 0L), `0.444` = c(1L,
1L, 0L), `0.545` = c(0L, 1L, 0L), `0.546` = c(0L, 1L, 0L),
`0.548` = c(0L, 1L, 0L), `0.609` = c(1L, 0L, 0L), `0.651` = c(1L,
0L, 0L), `0.652` = c(5L, 1L, 0L), `0.655` = c(1L, 0L, 0L)),
.Names = c("Class1", "0.438", "0.441", "0.442", "0.444", "0.545", "0.546",
"0.548", "0.609", "0.651", "0.652", "0.655"), class = "data.frame",
row.names = c(NA, -3L))