0

背景: 1 つの列に重複した値を持つデータ フレームがあります。列の値が重複しているすべての行を選択し、それらを処理してから、処理されたすべての行を含む新しいデータ フレームを吐き出して、このデータ フレームを分割しようとしています。

次のコードで何がうまくいかないのか、私は驚いています。

    dataSet <- structure(list(DAY = structure(1:10, .Label = c("Tuesday", 
    "Tuesday", "Tuesday", "Tuesday", "Tuesday", 
    "Tuesday", "Tuesday", "Tuesday", "Tuesday", 
    "Tuesday", "Tuesday", "Tuesday", "Tuesday", 
    "Tuesday", "Tuesday", "Tuesday", "Tuesday", 
    "Tuesday", "Tuesday", "Tuesday", "Tuesday", 
    "Tuesday", "Tuesday", "Tuesday"), class = "factor"), 
        variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
        1L), .Label = c("act1", "act2", "act3", "act4", 
        "act5", "act12", "act19", "act116", "act22", 
        "act6", "act13", "act111", "act117", "act23", 
        "act7", "act14", "act112", "act118", "act24", 
        "act8", "act15", "act113", "act119", "act25", 
        "act9", "act16", "act114", "act20", "act26", 
        "act10", "act17", "act115", "act21", "act27", 
        "act11", "act18"), class = "factor"), value = c(67, 
        65, 40, 79, 106, 90, 57, 59, 2, 12)), .Names = c("DAY", 
    "variable", "value"), row.names = c(NA, 10L), class = "data.frame")


uniq <- unique(dataSet$variable)
for (i in 1:length(uniq)){
     rowsPerVal <- dataSet[dataSet$variable == uniq[i], ]
     print(length(rowsPerVal))
}

variable列に同じ値を持つデータフレームに10個のレコードがあるときに、最後のprintステートメントが長さ3であると言っている方法がわかりません。

4

2 に答える 2

1

duplicated2+ 番目のエントリに対してのみ TRUE を返します。したがって、それを使用して行にインデックスを付けることができます。

dataSet[duplicated(dataSet$variable),] 

それらに割り当てることもできます:

dataSet[duplicated(dataSet$variable),]$value <- NA 
> dataSet
       DAY variable value
1  Tuesday     act1    67
2  Tuesday     act1    NA
3  Tuesday     act1    NA
4  Tuesday     act1    NA
5  Tuesday     act1    NA
6  Tuesday     act1    NA
7  Tuesday     act1    NA
8  Tuesday     act1    NA
9  Tuesday     act1    NA
10 Tuesday     act1    NA

「処理されたすべての行を含む新しいデータ フレームを吐き出す」には、サブセット化された data.frame を好きなように処理できます。

newDF <- transform( dataSet[duplicated(dataSet$variable),], DAY=sub("esd","foo",DAY) )
于 2013-05-08T20:35:09.303 に答える