簡體   English   中英

根據數據幀的長度在列中交換兩個條目

[英]Swap two entry in a column based on the length in a data frame

我有一個數據框df其中說ab列,如果值的長度大於3,我想在列之間交換值

輸入:

a       b
1       23
2       44
3       43324
4       76

預期產量:

a      b
1      23
2      44
43324  3
4      76

我在想類似下面的東西:

df <- transform(df, df$a = ifelse(length(df$b) > 3, a, b), df$a = ifelse(length(df$b) > 3, b, a))

但這沒有用,我知道我必須使用類似df[length(df$a)]但我無法弄清楚。

PS:對於那些好奇的人,輸入基本上是一個呼叫報告,有時在輸入數據時,他們會交換單元號(10位數字)和ID號(4位數字)。

這是一個班輪

df[nchar(df$b)>3, c("a", "b")] <- df[nchar(df$b)>3, c("b", "a")]
> df
#      a  b
#1     1 23
#2     2 44
#3 43324  3
#4     4 76

也許您可以構建一個適用於您的示例的自定義函數:

swap <- function(df) {

  a <- ifelse(nchar(df$b) > 3, df$b, df$a)
  b <- ifelse(nchar(df$b) > 3, df$a, df$b)
  df$a <- a
  df$b <- b

return(df)

}

#Let's test it
swap(df)
#      a  b
#1     1 23
#2     2 44
#3 43324  3
#4     4 76

暫無
暫無

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

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