3

私はRを初めて使用します。これが私の具体的な質問です。この例では、「data」という次のデータセットを使用しているとしましょう。私のヘッダーは、、、stateおよびtypeですvalue

structure(list(state = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("AK", 
"AL"), class = "factor"), type = structure(c(2L, 2L, 1L, 1L, 
2L, 1L), .Label = c(" D", " R"), class = "factor"), value = c(100L, 
200L, 100L, 150L, 100L, 150L)), .Names = c("state", "type", "value"
), class = "data.frame", row.names = c(NA, -6L))



  state type value
1    AK    R   100
2    AK    R   200
3    AK    D   100
4    AK    D   150
5    AL    R   100
6    AL    D   150

タイプと状態ごとに値を合計する関数を作成したいと思います。例えば。AKタイプの場合R、出力は300になります。AKタイプDの場合、出力は250になります。ALタイプRの場合、出力は100になり、ALタイプDの場合、出力は150になります。

4

5 に答える 5

7

プライヤーではなく、ただaggregate

> aggregate(value~state+type, data=data,FUN=sum)
  state type value
1    AK    D   250
2    AL    D   150
3    AK    R   300
4    AL    R   100
于 2012-12-30T00:25:23.203 に答える
5

あなたはただ使うことができますtapply

data <- read.csv(header=TRUE,text="state, type, value
AK, R, 100
AK, R, 200
AK, D, 100
AK, D, 150
AL, R, 100
AL, D, 150")

tapply(data$value, list(data$state,data$type), sum)
#     D   R
# AK  250 300
# AL  150 100
于 2012-12-30T00:24:23.700 に答える
5

@Matthew Lundbergの答えが最良の答えですが、いくつかの選択肢があります。

本当に plyr を使用したい場合は、次のようにします。

ddply(DF, .(state, type), numcolwise(sum))
  state type value
1    AK    D   250
2    AK    R   300
3    AL    D   150
4    AL    R   100

reshape2 パッケージを使用した別のソリューションを次に示します

library(reshape2)
dcast( melt(DF), state + type ~ variable, sum)
Using state, type as id variables
  state type value
1    AK    D   250
2    AK    R   300
3    AL    D   150
4    AL    R   100

ベクトルだけが必要な場合は、これが役立ちます。

sapply(with(DF, split(value, list(state, type))), sum)
AK.D  AL.D  AK.R  AL.R 
250   150   300   100 
于 2012-12-30T00:36:19.920 に答える
3

完全を期すために、「data.table」パッケージもbyベース R にあります。データセットが「myd」と呼ばれると仮定します。

by(myd$value, list(myd$state, myd$type), FUN=sum)
# : AK
# :  D
# [1] 250
# ------------------------------------------------------------------------------ 
# : AL
# :  D
# [1] 150
# ------------------------------------------------------------------------------ 
# : AK
# :  R
# [1] 300
# ------------------------------------------------------------------------------ 
# : AL
# :  R
# [1] 100

library(data.table)
DT <- data.table(myd)
DT[, sum(value), by = "state,type"]
#    state type  V1
# 1:    AK    R 300
# 2:    AK    D 250
# 3:    AL    R 100
# 4:    AL    D 150
于 2012-12-30T10:07:01.220 に答える
3

plyr ソリューションは次のようになります。

ddply(data, .(state,type),summarise, total=sum(value, na.rm = TRUE))
#   state type total
# 1    AK    D   250
# 2    AK    R   300
# 3    AL    D   150
# 4    AL    R   100
于 2012-12-30T00:34:16.757 に答える