我目前正在开发一个项目,我必须将一个变量分成两部分。我已经看过类似的问题,但它们没有帮助我。
原始数据集是用SPSS创建的。这是一个简短的变体来说明这一点。
df <- data.frame(code = c("013101", "013102", "013205", "114113"), s01_01 = c(1, 4, 2, 3), s01_02 = c(4, 3, 2, 4))
变量“code”是孩子的代码,因为有前导零,所以是字符变量。 另外两个变量是孩子们回答的示例问题。 变量“代码”中的前两位数字(例如 01)表示学校,数字三和四(例如 31)表示班级。最后两个区分班级内的孩子。
我现在想将变量“code”拆分为变量“school”和变量“class”。
到目前为止,我最好的选择是“data_separate”功能。
library(datawizard)
df <-
data_separate(
df,
select = code,
new_columns = c("school", "class"),
separator = 3,
append=TRUE
)
现在我已经把学校分开了,但是变量“班级”仍然包含班级和个别孩子。
我没有找到如何创建两个剪切方式不同的变量的解决方案。大多数围绕分离函数的解决方案都集中于了解分离变量的模式。因为我没有像“-”之类的分隔符。 那么我怎样才能准确地告诉 R 我希望如何分割变量呢?
你说你试图将
code
拆分为两个变量,但从你的描述来看,你实际上试图将其拆分为3个变量:学校、班级和孩子。
您可以使用
tidyr::separate
来执行此操作,创建 3 个新列,并通过在第二个和第四个字符之后将其剪切来将 code
拆分为 3 个变量。
tidyr::separate(df, code, into = c('school', 'class', 'child'), sep = c(2, 4))
#> school class child s01_01 s01_02
#> 1 01 31 01 1 4
#> 2 01 31 02 4 3
#> 3 01 32 05 2 2
#> 4 11 41 13 3 4
这可以通过
base R
中的单个函数来实现:
df$school <- substr(df$code, 1, 2)
df$class <- substr(df$code, 3, 4)
df$child <- substr(df$code, 5, 6)
df$code <- NULL # optional
df
> df
s01_01 s01_02 school class child
1 1 4 01 31 01
2 4 3 01 31 02
3 2 2 01 32 05
4 3 4 11 41 13