我想在数据帧中的一列的每一行中添加一个空白。根据数据类型,此列是字符。此空白的位置取决于每行中字符串的长度。
例如,对于该特定列中的所有行,所有少于6个字符的行都应该在第二个字符之后有空白,而那些有7个或更多字符的行应该在第四个字符之后有空白
例如,查看Iris数据集和Species列,对于setosa行,我希望在第二个字符后面有一个空白,所以";setosa";变成";se tosa";
我知道这将是一个ifelse声明,但我不确定如何进行
您可以首先确定iris$Species
:中的字符数
iris$Species_char <- nchar(as.character(iris$Species))
基于这个新列,您可以定义一个ifelse
语句,其中iris$Species_char <= 6
是您的条件,如果条件计算为TRUE,则在第二个字符后插入空格作为要执行的操作,如果条件评估为FALSE,则在第四个字符后插入空白作为要执行操作。为了确保插入点之前和之后的字符被回收,我们使用backreference,\1
指回之前的字符,\2
指回插入点之后的字符:
iris$Species <- ifelse(iris$Species_char <= 6,
sub("(\w{2})(.*)", "\1 \2", iris$Species),
sub("(\w{4})(.*)", "\1 \2", iris$Species))
以上两步合一:
iris$Species <- ifelse(nchar(iris$Species) <= 6,
sub("(\w{2})(.*)", "\1 \2", iris$Species),
sub("(\w{4})(.*)", "\1 \2", iris$Species))
编辑:使用dplyr
和stringr
:
library(dplyr)
library(stringr)
iris %>%
mutate(Species = if_else(str_count(Species) <= 6, sub("(\w{2})(.*)", "\1 \2", Species), sub("(\w{4})(.*)", "\1 \2", Species)))
结果:
iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Species_char
1 5.1 3.5 1.4 0.2 se tosa 6
2 4.9 3.0 1.4 0.2 se tosa 6
3 4.7 3.2 1.3 0.2 se tosa 6
4 4.6 3.1 1.5 0.2 se tosa 6
5 5.0 3.6 1.4 0.2 se tosa 6
6 5.4 3.9 1.7 0.4 se tosa 6
7 4.6 3.4 1.4 0.3 se tosa 6
8 5.0 3.4 1.5 0.2 se tosa 6
9 4.4 2.9 1.4 0.2 se tosa 6
10 4.9 3.1 1.5 0.1 se tosa 6
11 5.4 3.7 1.5 0.2 se tosa 6
12 4.8 3.4 1.6 0.2 se tosa 6
13 4.8 3.0 1.4 0.1 se tosa 6
14 4.3 3.0 1.1 0.1 se tosa 6
15 5.8 4.0 1.2 0.2 se tosa 6
16 5.7 4.4 1.5 0.4 se tosa 6
17 5.4 3.9 1.3 0.4 se tosa 6
18 5.1 3.5 1.4 0.3 se tosa 6
19 5.7 3.8 1.7 0.3 se tosa 6
20 5.1 3.8 1.5 0.3 se tosa 6
21 5.4 3.4 1.7 0.2 se tosa 6
22 5.1 3.7 1.5 0.4 se tosa 6
23 4.6 3.6 1.0 0.2 se tosa 6
24 5.1 3.3 1.7 0.5 se tosa 6
25 4.8 3.4 1.9 0.2 se tosa 6
26 5.0 3.0 1.6 0.2 se tosa 6
27 5.0 3.4 1.6 0.4 se tosa 6
28 5.2 3.5 1.5 0.2 se tosa 6
29 5.2 3.4 1.4 0.2 se tosa 6
30 4.7 3.2 1.6 0.2 se tosa 6
31 4.8 3.1 1.6 0.2 se tosa 6
32 5.4 3.4 1.5 0.4 se tosa 6
33 5.2 4.1 1.5 0.1 se tosa 6
34 5.5 4.2 1.4 0.2 se tosa 6
35 4.9 3.1 1.5 0.2 se tosa 6
36 5.0 3.2 1.2 0.2 se tosa 6
37 5.5 3.5 1.3 0.2 se tosa 6
38 4.9 3.6 1.4 0.1 se tosa 6
39 4.4 3.0 1.3 0.2 se tosa 6
40 5.1 3.4 1.5 0.2 se tosa 6
41 5.0 3.5 1.3 0.3 se tosa 6
42 4.5 2.3 1.3 0.3 se tosa 6
43 4.4 3.2 1.3 0.2 se tosa 6
44 5.0 3.5 1.6 0.6 se tosa 6
45 5.1 3.8 1.9 0.4 se tosa 6
46 4.8 3.0 1.4 0.3 se tosa 6
47 5.1 3.8 1.6 0.2 se tosa 6
48 4.6 3.2 1.4 0.2 se tosa 6
49 5.3 3.7 1.5 0.2 se tosa 6
50 5.0 3.3 1.4 0.2 se tosa 6
51 7.0 3.2 4.7 1.4 vers icolor 10
52 6.4 3.2 4.5 1.5 vers icolor 10
53 6.9 3.1 4.9 1.5 vers icolor 10
54 5.5 2.3 4.0 1.3 vers icolor 10
55 6.5 2.8 4.6 1.5 vers icolor 10
56 5.7 2.8 4.5 1.3 vers icolor 10
57 6.3 3.3 4.7 1.6 vers icolor 10
58 4.9 2.4 3.3 1.0 vers icolor 10
59 6.6 2.9 4.6 1.3 vers icolor 10
60 5.2 2.7 3.9 1.4 vers icolor 10
61 5.0 2.0 3.5 1.0 vers icolor 10
62 5.9 3.0 4.2 1.5 vers icolor 10
63 6.0 2.2 4.0 1.0 vers icolor 10
64 6.1 2.9 4.7 1.4 vers icolor 10
65 5.6 2.9 3.6 1.3 vers icolor 10
66 6.7 3.1 4.4 1.4 vers icolor 10
67 5.6 3.0 4.5 1.5 vers icolor 10
68 5.8 2.7 4.1 1.0 vers icolor 10
69 6.2 2.2 4.5 1.5 vers icolor 10
70 5.6 2.5 3.9 1.1 vers icolor 10
71 5.9 3.2 4.8 1.8 vers icolor 10
72 6.1 2.8 4.0 1.3 vers icolor 10
73 6.3 2.5 4.9 1.5 vers icolor 10
74 6.1 2.8 4.7 1.2 vers icolor 10
75 6.4 2.9 4.3 1.3 vers icolor 10
76 6.6 3.0 4.4 1.4 vers icolor 10
77 6.8 2.8 4.8 1.4 vers icolor 10
78 6.7 3.0 5.0 1.7 vers icolor 10
79 6.0 2.9 4.5 1.5 vers icolor 10
80 5.7 2.6 3.5 1.0 vers icolor 10
81 5.5 2.4 3.8 1.1 vers icolor 10
82 5.5 2.4 3.7 1.0 vers icolor 10
83 5.8 2.7 3.9 1.2 vers icolor 10
84 6.0 2.7 5.1 1.6 vers icolor 10
85 5.4 3.0 4.5 1.5 vers icolor 10
86 6.0 3.4 4.5 1.6 vers icolor 10
87 6.7 3.1 4.7 1.5 vers icolor 10
88 6.3 2.3 4.4 1.3 vers icolor 10
89 5.6 3.0 4.1 1.3 vers icolor 10
90 5.5 2.5 4.0 1.3 vers icolor 10
91 5.5 2.6 4.4 1.2 vers icolor 10
92 6.1 3.0 4.6 1.4 vers icolor 10
93 5.8 2.6 4.0 1.2 vers icolor 10
94 5.0 2.3 3.3 1.0 vers icolor 10
95 5.6 2.7 4.2 1.3 vers icolor 10
96 5.7 3.0 4.2 1.2 vers icolor 10
97 5.7 2.9 4.2 1.3 vers icolor 10
98 6.2 2.9 4.3 1.3 vers icolor 10
99 5.1 2.5 3.0 1.1 vers icolor 10
100 5.7 2.8 4.1 1.3 vers icolor 10
101 6.3 3.3 6.0 2.5 virg inica 9
102 5.8 2.7 5.1 1.9 virg inica 9
103 7.1 3.0 5.9 2.1 virg inica 9
104 6.3 2.9 5.6 1.8 virg inica 9
105 6.5 3.0 5.8 2.2 virg inica 9
106 7.6 3.0 6.6 2.1 virg inica 9
107 4.9 2.5 4.5 1.7 virg inica 9
108 7.3 2.9 6.3 1.8 virg inica 9
109 6.7 2.5 5.8 1.8 virg inica 9
110 7.2 3.6 6.1 2.5 virg inica 9
111 6.5 3.2 5.1 2.0 virg inica 9
112 6.4 2.7 5.3 1.9 virg inica 9
113 6.8 3.0 5.5 2.1 virg inica 9
114 5.7 2.5 5.0 2.0 virg inica 9
115 5.8 2.8 5.1 2.4 virg inica 9
116 6.4 3.2 5.3 2.3 virg inica 9
117 6.5 3.0 5.5 1.8 virg inica 9
118 7.7 3.8 6.7 2.2 virg inica 9
119 7.7 2.6 6.9 2.3 virg inica 9
120 6.0 2.2 5.0 1.5 virg inica 9
121 6.9 3.2 5.7 2.3 virg inica 9
122 5.6 2.8 4.9 2.0 virg inica 9
123 7.7 2.8 6.7 2.0 virg inica 9
124 6.3 2.7 4.9 1.8 virg inica 9
125 6.7 3.3 5.7 2.1 virg inica 9
126 7.2 3.2 6.0 1.8 virg inica 9
127 6.2 2.8 4.8 1.8 virg inica 9
128 6.1 3.0 4.9 1.8 virg inica 9
129 6.4 2.8 5.6 2.1 virg inica 9
130 7.2 3.0 5.8 1.6 virg inica 9
131 7.4 2.8 6.1 1.9 virg inica 9
132 7.9 3.8 6.4 2.0 virg inica 9
133 6.4 2.8 5.6 2.2 virg inica 9
134 6.3 2.8 5.1 1.5 virg inica 9
135 6.1 2.6 5.6 1.4 virg inica 9
136 7.7 3.0 6.1 2.3 virg inica 9
137 6.3 3.4 5.6 2.4 virg inica 9
138 6.4 3.1 5.5 1.8 virg inica 9
139 6.0 3.0 4.8 1.8 virg inica 9
140 6.9 3.1 5.4 2.1 virg inica 9
141 6.7 3.1 5.6 2.4 virg inica 9
142 6.9 3.1 5.1 2.3 virg inica 9
143 5.8 2.7 5.1 1.9 virg inica 9
144 6.8 3.2 5.9 2.3 virg inica 9
145 6.7 3.3 5.7 2.5 virg inica 9
146 6.7 3.0 5.2 2.3 virg inica 9
147 6.3 2.5 5.0 1.9 virg inica 9
148 6.5 3.0 5.2 2.0 virg inica 9
149 6.2 3.4 5.4 2.3 virg inica 9
150 5.9 3.0 5.1 1.8 virg inica 9