我一直致力于提供数据的文本分析。通常分析包括在纸上对成绩单进行编码,然后将信息作为数字代码导入 R。我想输出单词的成绩单,上面的单词编号被切割成一定的线宽(让我们使用任意 80 个字符)。
一个最小的可视化示例:
#what we start with:
person text word.num
1 greg The 1
2 greg dog 2
3 greg went 3
4 greg to 4
5 greg the 5
6 greg zoo, 6
7 greg but 7
8 greg ate 8
9 greg first. 9
10 sally He 10
11 sally likes 11
12 sally water 12
13 sally a 13
14 sally bit 14
15 sally too. 15
#我想要什么:
1 2 3 4 5 6
The dog went to the zoo,
7 8 9 10 11
but ate first. He likes
12 13 14 15
water a bit too.
当数字变大时会出现一个额外的问题,即较大的字数可能会超过一个短字,并且该字需要在其前面放置一个额外的空间。我认为通过确定最大数字的最大字符(数字)并在小于此数量的单词之后添加那么多空格,这在粘贴过程中很容易做到。
到目前为止,我解决这个问题的想法是:
- 为每行具有一定最大长度的字符向量创建一个 1 列矩阵(
strwrap
此处可能有用) - 如上所述在短词后添加额外的空格(在
nchar
这里gsub
可能有用) - 通过使用字数统计函数确定伴随矩阵的数值,然后
cumsum
创建seq
一个数值(实际上是字符)的伴随矩阵,该矩阵也是 1 列。这将逐行匹配字符(单词)矩阵。 - 现在这两个矩阵需要逐行交替(不知道该怎么做)
- 对齐单词上方的数字(不确定如何执行此操作,但
nchar
在这里可能有用)
我想将其保留在基本工具中,尽管我确信 HadelystringR
会很有用,但我想避免这种依赖。
dput
以上数据:
dat <- structure(list(person = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("greg", "sally"), class = "factor"),
text = structure(c(10L, 5L, 14L, 11L, 9L, 15L, 4L, 2L, 6L,
7L, 8L, 13L, 1L, 3L, 12L), .Label = c("a", "ate", "bit",
"but", "dog", "first.", "He", "likes", "the", "The", "to",
"too.", "water", "went", "zoo,"), class = "factor"), word.num = 1:15), row.names = c(NA,
-15L), .Names = c("person", "text", "word.num"), class = "data.frame")
我无法设计一个标题,我觉得在未来的 SO 用户可以搜索的同时抓住了这个想法。请建议修改...