在R中寻找数据操作的帮助 . 我有以下格式的数据;
ID L1 L2 L3
1 BBCBCACCBCB CBCBBBB BEBBBAAB
2 BBCBCCCCBCB CBCCCBC BBAACCCB
3 BBCBCACCBCB CBCBBBB BEBBBAAB
4 BBCBCACCBCB CBCBBBB BEBBBAAB
5 BBCBACBCCCB BBCCCBC BBCBAAAAB
6 BBCBBCCBBCB BBCBCEB BBBBCAACB
7 BBCBBCCBBCB BBCBCEB BBBBCAACB
8
9 BBCBCACCBCB CBCBBBB BEBBBAAB
10 BBCBBCCBBCB BBCBCEB BBBBCAACB
11 BBCBBCCBBCB BBCBCEB BBBBCAACB
每列中的值将是不同长度的字符串 . 我想要一个R函数,对于上面的每一列,都会
1)基于列中任何字符串的最大长度生成动态数量的列,例如, L1最大长度= 11,因此11个新列各自标记为L1_1:L1_11
2)然后将字符串分成三元组,例如
ID L1 L2 L3 L1_1 L1_2 L1_3 L1_4 L1_5 L1_6 L1_7 L1_8 L1_9
1 BBCBCACCBCB CBCBBBB BEBBBAAB BBC BCB CBC BCA CAC ACC CCB CBC BCB
3)对三元组中的三元组进行计算,即('a'* 1的数量)('b'* 3的数量)('c'* 7的数量) .
4)在新列中返回此计算的值 .
我发现建议的代码完全符合我在运行列L1,L2时所需的功能,但不适用于L3 . 我收到的错误是'as.data.frame.matrix中的错误(passed.args [[i]],stringsAsFactors = st:缺少值,其中需要TRUE / FALSE'
有任何想法吗?非常感谢 .
编辑
dput(DF):
structure(list(ID = 1:11, L1 = structure(c(4L, 5L, 4L, 4L, 2L, 3L, 3L, 1L, 4L, 3L, 3L), .Label = c("", "BBCBACBCCCB","BBCBBCCBBCB","BBCBCACCBCB", "BBCBCCCCBCB"), class = "factor"), L2 = structure(c(4L, 5L, 4L, 4L, 3L, 2L, 2L, 1L, 4L, 2L, 2L), .Label = c("","BBCBCEB","BBCCCBC", "CBCBBBB", "CBCCCBC"), class = "factor"), L3 = structure(c(5L,2L, 5L, 5L, 4L, 3L, 3L, 1L, 5L, 3L, 3L), .Label = c("", "BBAACCCB", "BBBBCAACB", "BBCBAAAAB", "BEBBBAAB"), class = "factor")), .Names = c("ID", "L1", "L2", "L3"), class = "data.frame", row.names = c(NA,-11L))
结构(列表(ID = 1:11,L1 =结构(c(4L,5L,4L,4L,2L,3L,3L,1L,4L,3L,3L),. Label = c(“”,“BBCBACBCCCB” ,“BBCBBCCBBCB”,“BBCBCACCBCB”,“BBCBCCCCBCB”),类=“因子”),L2 =结构(c(4L,5L,4L,4L,3L,2L,2L,1L,4L,2L,2L), .Label = c(“”,“BBCBCEB”,“BBCCCBC”,“CBCBBBB”,“CBCCCBC”),class =“factor”),L3 =结构(c(5L,2L,5L,5L,4L,3L, 3L,1L,5L,3L,3L), . Label = c(“”,“BBAACCCB”,“BBBBCAACB”,“BBCBAAAAB”,“BEBBBAAB”),class =“factor”)), . Name = c(“ ID“,”L1“,”L2“,”L3“),class =”data.frame“,row.names = c(NA,-11L))
2 回答
如果要基于三元组进行计算,请在执行
cbind
步骤之前运行以下命令UPDATE
您可以创建一个函数并使用它,如下所示
如果你想使用
tidyverse
动词