r - 从一个字符串变量创建多个虚拟变量

标签 r string dataframe split splitstackshape

我已经尝试了几乎所有来自 this similar question 的东西,但我无法得到其他人似乎得到的结果。这是我的问题:

我有一个这样的数据框,列出了每位老师的成绩:

> profs <- data.frame(teaches = c("1st", "1st, 2nd",
                                  "2nd, 3rd",
                                  "1st, 2nd, 3rd"))
> profs
        teaches
1           1st
2      1st, 2nd
3      2nd, 3rd
4 1st, 2nd, 3rd

我一直在寻找将 teaches 变量分成列的解决方案,如下所示:

  teaches1st teaches2nd teaches3rd
1          1          0          0
2          1          1          0
3          0          1          1
4          1          1          1

I understand this solution考虑到回答者的解释,涉及 splitstackshape 库和显然已弃用的 concat.split.expanded 函数应该完全符合我的要求。但是,我似乎无法达到相同的结果:

> concat.split.expanded(profs, "teaches", fill = 0, drop = TRUE)
Fehler in seq.default(min(vec), max(vec)) : 
  'from' cannot be NA, NaN or infinite

使用 cSplit,据我所知,它取代了“大多数早期的 concat.split* 函数”,我明白了:

> cSplit(profs, "teaches")
   teaches_1 teaches_2 teaches_3
1:       1st        NA        NA
2:       1st       2nd        NA
3:       2nd       3rd        NA
4:       1st       2nd       3rd

我已经尝试使用 cSplit 的帮助并调整其中的每一个参数,但我就是无法进行拆分。感谢您的帮助。

最佳答案

由于您的连接数据是连接的字符串(不是连接的数值),您需要添加 type = "character" 以使函数按预期工作。

该函数的默认设置是数值,因此会出现有关 NaN 等的错误。

命名已与同一系列中其他函数的缩写形式更加一致。因此,它现在是 cSplit_e(尽管旧函数名称仍然有效)。

library(splitstackshape)
cSplit_e(profs, "teaches", ",", type = "character", fill = 0)
#         teaches teaches_1st teaches_2nd teaches_3rd
# 1           1st           1           0           0
# 2      1st, 2nd           1           1           0
# 3      2nd, 3rd           0           1           1
# 4 1st, 2nd, 3rd           1           1           1

?concat.split.expanded 的帮助页面与cSplit_e 的帮助页面相同。如果您有任何使它更易于理解的提示,请在包的 GitHub 页面上提出问题。

关于r - 从一个字符串变量创建多个虚拟变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29101708/

相关文章:

r - 按列拆分数据帧并在每个子集中保留一组公共(public)列

pandas - 如何根据其他列填充分类数据中的缺失值?

r - 在第一次出现 0 后,将一行的列的后续值更改为 0

php - 解谜: Finding All Words Within a Larger Word in PHP

c - 如何使用 char* 作为 char[]

java - 越界异常(字符串)

python - 如何将一列字符串转换为数字?

mysql - 加入匹配记录并在不匹配时创建组合

r - 使用R中的distm()计算数据帧中两个GPS位置之间的距离

r - SparkR 中的“最后一个”函数