假设我想找到数据帧每行中的字数。 所以在下面的例子中,我想找到第一列中的第一个值 有3个单词,第二个值有4个单词,依此类推。我认为这是一项任务 对于其中一个应用函数,但我很难解决这个问题。
dat = data.frame(one=c("That is Cool",
"I like my bank", "He likes pizza", "What"))
我是否需要使用strsplit()
或在创建时使用apply()
功能更好
功能:apply(dat, 1, function(x)...
答案 0 :(得分:6)
下面的代码应该这样做,假设所有单词都用空格分隔。
sapply(strsplit(as.character(dat$one), " "), length)
# [1] 3 4 3 1
答案 1 :(得分:2)
另一种基于正则表达式的方法。想法是删除除空格以外的所有内容并计算修改后的字符串的长度(即空格数,所以+1以获得单词数):
nchar(gsub("[^ ]", "", dat$one)) + 1
# [1] 3 4 3 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 <- " One Two "
nchar(gsub("[^ ]|^ *| *$", "", gsub(" +", " ", x))) + 1
# [1] 2