在R中查找数据框中某一列中每个字符串的长度。

6

我希望计算name列中每个字符串的字符数。我的数据框sample如下所示:

date        name           expenditure      type
23MAR2013   KOSH ENTRP     4000             COMPANY
23MAR2013   JOHN DOE       800              INDIVIDUAL
24MAR2013   S KHAN         300              INDIVIDUAL
24MAR2013   JASINT PVT LTD 8000             COMPANY
25MAR2013   KOSH ENTRPRISE 2000             COMPANY
25MAR2013   JOHN S DOE     220              INDIVIDUAL
25MAR2013   S KHAN         300              INDIVIDUAL
26MAR2013   S KHAN         300              INDIVIDUAL

为什么nchar会给我返回一列随机数字?stringr包中的str_length()也是如此。

Length <- aggregate(nchar(sample$name), by=list(sample$name), FUN=nchar)

输出

         Group.1       x
1 JASINT PVT LTD       2
2       JOHN DOE       1
3     JOHN S DOE       2
4     KOSH ENTRP       2
5 KOSH ENTRPRISE       2
6         S KHAN 1, 1, 1

期望输出:

     Group.1       x
1 JASINT PVT LTD       14
2       JOHN DOE       8
3     JOHN S DOE       10
4     KOSH ENTRP       10
5 KOSH ENTRPRISE       14
6         S KHAN       6

以上表格的CSV文件:
"Date","name","expenditure","type"
"23MAR2013","KOSH ENTRP",4000,"COMPANY"
"23MAR2013 ","JOHN DOE",800,"INDIVIDUAL"
"24MAR2013","S KHAN",300,"INDIVIDUAL"
"24MAR2013","JASINT PVT LTD",8000,"COMPANY"
"25MAR2013","KOSH ENTRPRISE",2000,"COMPANY"
"25MAR2013","JOHN S DOE",220,"INDIVIDUAL"
"25MAR2013","S KHAN",300,"INDIVIDUAL"
"26MAR2013","S KHAN",300,"INDIVIDUAL"

2
你需要在计数中包括 空格 吗?在预期的输出中,关于字符数量存在一些不一致性。例如,在第一行中,空格也被计算在内,但在最后一行中,“5”中的空格被省略了。如果这是一个打字错误,则应该是 data.frame(Group=unique(sample$name), x=nchar(unique(sample$name))) - akrun
3个回答

6
您还可以对数据框应用 `nchar` 函数,并从相应的列中获取结果:
data.frame(names=temp$name,chr=apply(temp,2,nchar)[,2])
      names chr
1     KOSH ENTRP  10
2       JOHN DOE   8
3         S KHAN   6
4 JASINT PVT LTD  14
5 KOSH ENTRPRISE  14
6     JOHN S DOE  10
7         S KHAN   6
8         S KHAN   6

3
如果“期望输出”中的最后一行是打错字,
 aggregate(name~name1, transform(sample, name1=name),
                         FUN=function(x) nchar(unique(x)))
 #            name1 name
 #1 JASINT PVT LTD   14
 #2       JOHN DOE    8
 #3     JOHN S DOE   10
 #4     KOSH ENTRP   10
 #5 KOSH ENTRPRISE   14
 #6         S KHAN    6

或者

 Un1 <- unique(sample$name)
 data.frame(Group=Un1, x=nchar(Un1))

2

或者,使用 data.table

dtx[,PepSeqLen := nchar(PepSeq)]

1
错误信息:'nchar()'需要一个字符向量。 - Morteza Mashayekhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接