R 如果A列满足条件,则在A列和B列中粘贴前导零

R 如果A列满足条件,则在A列和B列中粘贴前导零,r,loops,R,Loops,数据: 如果A列为10个字符,我尝试在A列和B列中添加一个前导0 这是我到目前为止写的: A B "2058600192", "2058644" "4087600101", "4087601" "30138182591","30138011" 我也尝试过使用dplyr解决方案,但我不确定如何基于一列对两列进行变异。如果您有任何见解,我们将不胜感激。您可以

数据:

如果A列为10个字符,我尝试在A列和B列中添加一个前导0

这是我到目前为止写的:

A            B
"2058600192", "2058644"
"4087600101", "4087601"
"30138182591","30138011"
我也尝试过使用dplyr解决方案,但我不确定如何基于一列对两列进行变异。如果您有任何见解,我们将不胜感激。

您可以在此处使用ifelse矢量化函数:

  number of items to replace is not a multiple of replacement length

您可以在此处使用ifelse矢量化函数:

  number of items to replace is not a multiple of replacement length


您可以获取字符数等于10的索引,并使用lappy对多列替换这些值

data$A <- ifelse(nchar(data$A) == 10, paste0("0", data$A), data$A)
data$B <- ifelse(nchar(data$B) == 10, paste0("0", data$B), data$B)
data

            A        B
1 02058600192  2058644
2 04087600101  4087601
3 30138182591 30138011
资料


您可以获取字符数等于10的索引,并使用lappy对多列替换这些值

data$A <- ifelse(nchar(data$A) == 10, paste0("0", data$A), data$A)
data$B <- ifelse(nchar(data$B) == 10, paste0("0", data$B), data$B)
data

            A        B
1 02058600192  2058644
2 04087600101  4087601
3 30138182591 30138011
资料


你的解决方案已经相当不错了。你只是犯了一些很小的错误。此代码将提供正确的输出:

df <- structure(list(A = c(2058600192, 4087600101, 30138182591), B = c(2058644L, 
4087601L, 30138011L)), class = "data.frame", row.names = c(NA, -3L))

唯一的区别是data$A[i]您的解决方案已经相当不错了。你只是犯了一些很小的错误。此代码将提供正确的输出:

df <- structure(list(A = c(2058600192, 4087600101, 30138182591), B = c(2058644L, 
4087601L, 30138011L)), class = "data.frame", row.names = c(NA, -3L))

唯一的区别是数据$A[i],以防您对使用dplyr感兴趣,这里有另一个使用transmute的解决方案


以防您对使用dplyr感兴趣,这里有另一个使用transmute的解决方案


另一种方法你可以试试

df %>%
  # Need to transmute B first, so that nchar is evaluated on the original A column and not on the one with leading zeros
  transmute(B = ifelse(nchar(A) == 10, paste0(0, B), B),
            A = ifelse(nchar(A) == 10, paste0(0, A), A)) %>%
  # Just change the order of the columns to the original one
  select(A,B)
str_length用于检测字符串的长度 您可以使用str_pad添加前导零。关于stru焊盘的更多信息 我们可以使用grepl来检测A列中带前导零的字符串,并将前导零添加到B列中。
另一种方法你可以试试

df %>%
  # Need to transmute B first, so that nchar is evaluated on the original A column and not on the one with leading zeros
  transmute(B = ifelse(nchar(A) == 10, paste0(0, B), B),
            A = ifelse(nchar(A) == 10, paste0(0, A), A)) %>%
  # Just change the order of the columns to the original one
  select(A,B)
str_length用于检测字符串的长度 您可以使用str_pad添加前导零。关于stru焊盘的更多信息 我们可以使用grepl来检测A列中带前导零的字符串,并将前导零添加到B列中。 为了使For循环正常工作,还应该在RHS上子集A值。paste00,数据$A[i]和B相同。目前,您正在将A的所有值替换为一个值。为了使for循环正常工作,您还应该在RHS上对A值进行子集设置。paste00,数据$A[i]和B相同。目前,您正在一个值中替换A的所有值。