這裏是經由基礎R一個想法,
ind <- rowSums(sapply(df, function(i) cumsum(grepl('\\.', i))))
df[] <- lapply(df[], function(i) ifelse(grepl('\\.', i), ind, paste0('-', i)))
df
# X1 X2
#1 -1 -2
#2 -3 -4
#3 -6 -8
#4 -5 1
#5 2 -7
#6 3 -9
#7 -11 4
注:我轉換df
爲char ACTER,
df[] <- lapply(df[], as.character)
編輯
關於你的行號的要求,那麼這應該這樣做,
ind1 <- apply(df, 1, function(i) paste(sort(i), collapse = '.'))
df2 <- sapply(df, function(i) match(i, ind1))
df[] <- lapply(df[], function(i) ifelse(grepl('\\.', i), 0, paste0('-', i)))
df[!is.na(df2)] <- df2[!is.na(df2)]
df
# X1 X2
#1 -1 -2
#2 -3 -4
#3 -6 -8
#4 -5 1
#5 2 -7
#6 4 -9
#7 -11 5
如果在以後用這個數據幀做計算的規劃,然後你應該轉換爲整數,即,
df[] <- lapply(df[], as.integer)
str(df)
#'data.frame': 7 obs. of 2 variables:
# $ X1: int -1 -3 -6 -5 2 4 -11
# $ X2: int -2 -4 -8 1 -7 -9 5
因爲它是t他第三次和第四次是「。」出現 – Miguel123
是的,我知道了。看看我的回答 – Sotos
是的,謝謝! :)也是一個不錯的解決方案,雖然我不熟悉sapply。根據你的問題 - 如果我們想要檢查「。」的數字,代碼將如何顯示 - 條目並將其替換爲上面組合出現的行號?這意味着:1.2。 => 1,3.4 => 2,1.2.5 => 4,3.4.7 => 5? – Miguel123