簡體   English   中英

R根據行值將索引列添加到數據框

[英]R add index column to data frame based on row values

這是r的延續-基於因素的組合,如何向數據幀添加行索引

我嘗試使用綠色選中的答案來復制我認為是期望的結果,並且一直得到預期之外的結果。 我確定我確實在做一些基本的錯誤,但似乎看不到它,或者我誤解了所需的狀態。

來自原始帖子的數據:

temp <- data.frame(
Dim1 = c("A","A","A","A","A","A","B","B"),
Dim2 = c(100,100,100,100,200,200,100,200),
 Value = sample(1:10, 8)
 )

然后我運行以下代碼: temp$indexLength <- ave( 1:nrow(temp), temp$Dim1, factor( temp$Dim2), FUN=function(x) 1:length(x) )

和: temp$indexSeqAlong <- ave( 1:nrow(temp), temp$Dim1, factor( temp$Dim2), FUN=seq_along )

然后創建以下內容: temp$indexDesired <- c(1, 1, 1, 1, 2, 2, 3, 3)

...最后顯示以下數據框:

  Dim1 Dim2 Value indexLength indexSeqAlong indexDesired
1    A  100     6           1             1            1
2    A  100     2           2             2            1
3    A  100     9           3             3            1
4    A  100     8           4             4            1
5    A  200    10           1             1            2
6    A  200     4           2             2            2
7    B  100     3           1             1            3
8    B  200     5           1             1            4

如果我能弄清我沒有得到想要的索引的原因-並假設代碼可以擴展到兩個以上的變量-我應該被設置好。 提前致謝!

如果使用data.table ,則有一個“ symbol” .GRP記錄此信息(一個簡單的組計數器)

library(data.table)
DT <- data.table(temp)
DT[, index := .GRP, by = list(Dim1, Dim2)]
DT
#    Dim1 Dim2 Value index
# 1:    A  100    10     1
# 2:    A  100     2     1
# 3:    A  100     9     1
# 4:    A  100     4     1
# 5:    A  200     6     2
# 6:    A  200     1     2
# 7:    B  100     8     3
# 8:    B  200     7     4

一旦第一個參數中的值被分區,就無法“知道”它們的傳遞順序。 您需要一種可以查看值更改的方法。 duplicated函數是通用的,並且具有data.frame方法,該方法查看多個列:

temp$indexSeqAlong <-  cumsum(!duplicated(temp[, 1:2]) )
temp

  Dim1 Dim2 Value indexSeqAlong
1    A  100     8             1
2    A  100     2             1
3    A  100     7             1
4    A  100     3             1
5    A  200     5             2
6    A  200     1             2
7    B  100     4             3
8    B  200    10             4

可擴展為任意數量的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM