第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對數(shù)據(jù)幀中組內(nèi)的行進(jìn)行編號

對數(shù)據(jù)幀中組內(nèi)的行進(jìn)行編號

動漫人物 2019-05-30 11:10:31
對數(shù)據(jù)幀中組內(nèi)的行進(jìn)行編號使用類似于此的數(shù)據(jù)框架:set.seed(100)  df <- data.frame(cat = c(rep("aaa", 5), rep("bbb", 5), rep("ccc", 5)), val = runif(15))             df <- df[order(df$cat, df$val), ]  df     cat        val  1  aaa 0.05638315  2  aaa 0.25767250  3  aaa 0.30776611  4  aaa 0.46854928  5  aaa 0.55232243  6  bbb 0.17026205  7  bbb 0.37032054  8  bbb 0.48377074  9  bbb 0.54655860  10 bbb 0.81240262  11 ccc 0.28035384  12 ccc 0.39848790  13 ccc 0.62499648  14 ccc 0.76255108  15 ccc 0.88216552 我試圖在每個組中添加一個有編號的列。這樣做顯然不是利用R的力量: df$num <- 1   for (i in 2:(length(df[,1]))) {     if (df[i,"cat"]==df[(i-1),"cat"]) {       df[i,"num"]<-df[i-1,"num"]+1       }   }   df     cat        val num  1  aaa 0.05638315   1  2  aaa 0.25767250   2  3  aaa 0.30776611   3  4  aaa 0.46854928   4  5  aaa 0.55232243   5  6  bbb 0.17026205   1  7  bbb 0.37032054   2  8  bbb 0.48377074   3  9  bbb 0.54655860   4  10 bbb 0.81240262   5  11 ccc 0.28035384   1  12 ccc 0.39848790   2  13 ccc 0.62499648   3  14 ccc 0.76255108   4  15 ccc 0.88216552   5  做這件事的好方法是什么?
查看完整描述

4 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗 獲得超2個贊

因為我做了這個r-常見問題更完整的問題,一個基本的R選項sequence和rle:


df$num <- sequence(rle(df$cat)$lengths)

它給出了預(yù)期的結(jié)果:


> df

   cat        val num

4  aaa 0.05638315   1

2  aaa 0.25767250   2

1  aaa 0.30776611   3

5  aaa 0.46854928   4

3  aaa 0.55232243   5

10 bbb 0.17026205   1

8  bbb 0.37032054   2

6  bbb 0.48377074   3

9  bbb 0.54655860   4

7  bbb 0.81240262   5

13 ccc 0.28035384   1

14 ccc 0.39848790   2

11 ccc 0.62499648   3

15 ccc 0.76255108   4

12 ccc 0.88216552   5

如果df$cat是一個因素變量,您需要將它包裝在as.character第一:


df$num <- sequence(rle(as.character(df$cat))$lengths)


查看完整回答
反對 回復(fù) 2019-05-30
?
繁花不似錦

TA貢獻(xiàn)1851條經(jīng)驗 獲得超4個贊

下面是使用for按組循環(huán),而不是按行循環(huán)(就像OP做的那樣)

for (i in unique(df$cat)) df$num[df$cat == i] <- seq_len(sum(df$cat == i))


查看完整回答
反對 回復(fù) 2019-05-30
?
BIG陽

TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊

我想添加一個data.table變量使用rank()函數(shù),它提供了更改順序的額外可能性,從而使其比seq_len()解決方案,非常類似于RDBMS中的行號函數(shù)。


# Variant with ascending ordering

library(data.table)

dt <- data.table(df)

dt[, .( val

   , num = rank(val))

    , by = list(cat)][order(cat, num),]


    cat        val num

 1: aaa 0.05638315   1

 2: aaa 0.25767250   2

 3: aaa 0.30776611   3

 4: aaa 0.46854928   4

 5: aaa 0.55232243   5

 6: bbb 0.17026205   1

 7: bbb 0.37032054   2

 8: bbb 0.48377074   3

 9: bbb 0.54655860   4

10: bbb 0.81240262   5

11: ccc 0.28035384   1

12: ccc 0.39848790   2

13: ccc 0.62499648   3

14: ccc 0.76255108   4


# Variant with descending ordering

dt[, .( val

   , num = rank(-val))

    , by = list(cat)][order(cat, num),]


查看完整回答
反對 回復(fù) 2019-05-30
  • 4 回答
  • 0 關(guān)注
  • 875 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號