Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 查找每行中的字数_String_R_Apply - Fatal编程技术网

String 查找每行中的字数

String 查找每行中的字数,string,r,apply,String,R,Apply,假设我想找出数据帧中每行的字数。 在下面的例子中,我想找到第一列中的第一个值 有3个字,第二个值有4个字,依此类推。我想这是一项任务 对于其中一个apply函数,但我很难找到答案 dat = data.frame(one=c("That is Cool", "I like my bank", "He likes pizza", "What")) 我需要使用strsplit()还是在创建时使用apply()函数更好 函数:apply(dat,1,函数(x)…下面的代码应该执行此操作,假设所有

假设我想找出数据帧中每行的字数。 在下面的例子中,我想找到第一列中的第一个值 有3个字,第二个值有4个字,依此类推。我想这是一项任务 对于其中一个apply函数,但我很难找到答案

dat = data.frame(one=c("That is Cool",
  "I like my bank", "He likes pizza", "What"))
我需要使用
strsplit()
还是在创建时使用
apply()
函数更好
函数:
apply(dat,1,函数(x)…

下面的代码应该执行此操作,假设所有单词都用空格分隔

sapply(strsplit(as.character(dat$one), " "), length)
# [1] 3 4 3 1

另一种基于正则表达式的方法。其思想是删除除空格以外的所有内容,并计算修改后字符串的长度(即空格数,所以+1得到单词数):

此外,您还可以添加保护以处理开头或结尾带有空格的字符串:

nchar(gsub("[^ ]|^ *| *$", "", dat$one)) + 1
# [1] 3 4 3 1
示例:

x <- c(" One two ", "One Two ", " One two")
nchar(gsub("[^ ]", "", x)) + 1
# [1] 4 3 3
sapply(strsplit(x, " "), length)
# [1] 3 2 3
nchar(gsub("[^ ]|^ *| *$", "", x)) + 1
# [1] 2 2 2
x
x <- c(" One two ", "One Two ", " One two")
nchar(gsub("[^ ]", "", x)) + 1
# [1] 4 3 3
sapply(strsplit(x, " "), length)
# [1] 3 2 3
nchar(gsub("[^ ]|^ *| *$", "", x)) + 1
# [1] 2 2 2
x <- " One    Two    "
nchar(gsub("[^ ]|^ *| *$", "", gsub(" +", " ", x))) + 1 
# [1] 2