当前位置: 首页 > 知识库问答 >
问题:

使用dplyr,我应该如何创建一列字符串,根据另一列的值重复一个字符?

胥博文
2023-03-14

例如,使用mtcars,我想创建一个新列,这样当carb=4时,carb\u点

使用dplyr,我尝试了

library(dplyr)
mtcars2 <- mtcars %>% mutate(carb_dots = rep(".", carb))

此错误与

mutate\u impl.(数据,点)中出错:计算错误:“times”参数无效。

我该怎么办?谢谢你的建议。


共有2个答案

归俊杰
2023-03-14

我们可以使用strrep

library(dplyr)
mtcars %>% 
      mutate(carb_dots = strrep(".", carb))
#                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb carb_dots
#Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4      ....
#Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4      ....
#Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1         .
#Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1         .
#Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2        ..
#Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1         .
#Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4      ....
#...

如果我们需要使用rep

mtcars %>%
   rowwise %>%
   mutate(carb_dots = paste(rep(".", carb), collapse=""))
梁丘宏硕
2023-03-14

通过添加stringr,您可以执行以下操作:

mtcars %>% 
 mutate(carb_dots = str_dup(".", carb))

    mpg cyl  disp  hp drat    wt  qsec vs am gear carb carb_dots
1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4      ....
2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4      ....
3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1         .
4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1         .
5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2        ..
6  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1         .
7  14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4      ....
8  24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2        ..
9  22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2        ..
10 19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4      ....
 类似资料:
  • 我有兴趣在我的数据框中加入一个叫做mapCol列的列 创建一个stringColumn,它只是Map列的键和值,其中的值是“key,value”: 我尝试创建一个UDF来传递这个值,如下所示: 我不断发现以下错误: 无法执行用户定义的函数($anonfun$1:(映射)=

  • 我试图创建一个表示JSON对象数组的字符串文字,所以我想到了使用字符串插值特性,如下面的代码所示: 现在我想使用逐字字符串,这样我就不必使用反斜杠来转义双引号。因此,通过这个答案,我了解到逐字字符串和字符串插值可以一起使用。所以我改变了我的代码如下: 但它无法编译。如果我的用法有任何错误,或者在这种情况下无法使用C#的逐字字符串功能转义双引号,有人能帮我吗?

  • 如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="

  • 我有一个PySpark数据帧,它有几个字段,例如: 我想创建一个新列,将其他注释的值混合到一个新字符串中。期望的输出为: 我正在尝试做(伪代码): 如何实现这一点?

  • 我希望根据字符的首次出现将Spark DataFrame的列分成两个不同的列,在本例中字符是下划线(“_”)。 我准备了一个100%可复制的例子: 模拟Spark DataFrame为: 上面的代码创建了一个表,如下所示:

  • 问题内容: 我有一个名为Vendor的表,在此表中有一个名为AccountTerms的列,该列仅显示一个值(即0、1、2、3),依此类推。我也有一个要使用()的列,以反映该值的含义,例如: 等等… 我需要的是一个脚本,它将查看AccountTerms中的值,然后将更新以显示上面显示的单词值。我该怎么做呢? 问题答案: 我将尝试以一种尽可能简单的方式来解释这一点,以便于理解: 假设您有一个这样的表设