如何在R中提取索引列和索引行?
我有一个计算任何脚本中字母和字符出现次数的函数。但是,我不知道如何从给定脚本中提取单个字母(字符)的列和行索引。你能用一种简单的方式指导我并解释一下怎么做吗 例如,我使用了一个名为“九月”的脚本,其中只存储单词“九月” 我的职能:如何在R中提取索引列和索引行?,r,R,我有一个计算任何脚本中字母和字符出现次数的函数。但是,我不知道如何从给定脚本中提取单个字母(字符)的列和行索引。你能用一种简单的方式指导我并解释一下怎么做吗 例如,我使用了一个名为“九月”的脚本,其中只存储单词“九月” 我的职能: fun <- function(filename) { file <- paste(readLines(filename), collapse = '') chars <- strsplit(file, NULL)[[1]] summar
fun <- function(filename)
{
file <- paste(readLines(filename), collapse = '')
chars <- strsplit(file, NULL)[[1]]
summary(factor(chars))
}
source('September.r')
data.frame(fun('September.r'))
我想得到这样的东西:
char count row col
b 1 1 7
e 3 1 2,5,8
m 1 1 6
p 1 1 3
r 1 1 9
S 1 1 1
t 1 1 4
更新
当我测试@akrun代码时,我注意到程序在处理更多文本时工作不正常
text <- "September,
September, September,
September, September"
text这里有一个使用dplyr的解决方案:
library(dplyr)
text = "September."
unique(unlist(strsplit(text, ""))) %>%
sapply(gregexpr, text, fixed = TRUE) %>%
unlist() %>%
data.frame(letter = names(.), col = .) %>%
group_by(letter = gsub("^(.).*", "\\1", letter)) %>%
summarize(count = n(),
col = paste(col, collapse = ","))
结果:
# A tibble: 8 x 3
letter count col
<chr> <int> <chr>
1 . 1 10
2 b 1 7
3 e 3 2,5,8
4 m 1 6
5 p 1 3
6 r 1 9
7 S 1 1
8 t 1 4
提供文件路径或使用textConnection
提供字符串:
char_ind_count("<path_to_file>/extract_index_cols.txt")
char_ind_count(textConnection(text1))
char\u ind\u count(“/extract\u index\u cols.txt”)
字符索引计数(textConnection(text1))
如果“text”是一个字符串,那么这里有另一个带有tidyverse的选项
library(tidyverse)
str_split(text, "")[[1]] %>%
tibble(char = .) %>%
rownames_to_column('rn') %>%
group_by(char) %>%
summarise(Count = n(), row = 1, col = toString(rn))
# A tibble: 7 x 4
# char Count row col
# <chr> <int> <dbl> <chr>
#1 b 1 1 7
#2 e 3 1 2, 5, 8
#3 m 1 1 6
#4 p 1 1 3
#5 r 1 1 9
#6 S 1 1 1
#7 t 1 1 4
库(tidyverse)
str_拆分(文本“”[[1]]%>%
TIBLE(字符=)%>%
行名到列('rn')%>%
分组依据(字符)%>%
汇总(计数=n(),行=1,列=toString(rn))
#一个tibble:7x4
#字符计数行列
#
#1b117
#2 e 3 1 2 5 8
#3米11 6
#4p113
#5 r 11 9
#6 S 1 1
#7T114
数据
text您能否展示一个可复制的小示例以获得输出?示例是我的函数,我的意思是如何获取列和行的索引,以便函数返回上面的内容。我的意思是关于您函数的输入数据。你是说其他人应该自己构造数据并测试你的函数吗?函数应该适用于每个脚本,我的脚本只包含单词“九月”。这个函数运行得很好。关于你的数据是什么样子的,还不完全清楚set.seed(24);m1非常感谢,我如何才能让它工作,以便加载任何脚本?@Kim这取决于您试图加载的“脚本”。您是否正在加载.txt
文件,其中每个文本文件仅包含您试图计算索引的文本?我考虑将源设置为任意script@Kim你能说得更具体些吗?所以你想让它能够读取任何文件类型?还是只是文本文件?@Kim查看我的更新。我希望这就是你要找的。如果您读取的是R脚本而不是文本文件,只需保存R脚本并在函数中提供该脚本的路径。我的意思是创建一个以R文件为基础的函数和一个源函数,就像我最初的示例中一样。@Kim只需在函数(文件路径){text=paste(读取行(文件路径))上方添加该行即可,collapse='';
我仍然有一个问题,我如何在代码中设置来搜索我,例如,仅字符串c(“S”,“b”)?@Kim您可以使用过滤器(在%c(“S”,“b”)中的字符%
要仅获取摘要之后或之前的行,在测试程序时,我注意到它工作不正常,即当您输入较长的文本时,列不会从以下文本行的第一行开始计数。
char_ind_count = function(file_path){
text = paste(readLines(file_path), collapse = '')
unique(unlist(strsplit(text, ""))) %>%
sapply(gregexpr, text, fixed = TRUE) %>%
unlist() %>%
data.frame(letter = names(.), col = .) %>%
group_by(letter = gsub("^(.).*", "\\1", letter)) %>%
summarize(count = n(),
col = paste(col, collapse = ","))
}
char_ind_count("<path_to_file>/extract_index_cols.txt")
char_ind_count(textConnection(text1))
library(tidyverse)
str_split(text, "")[[1]] %>%
tibble(char = .) %>%
rownames_to_column('rn') %>%
group_by(char) %>%
summarise(Count = n(), row = 1, col = toString(rn))
# A tibble: 7 x 4
# char Count row col
# <chr> <int> <dbl> <chr>
#1 b 1 1 7
#2 e 3 1 2, 5, 8
#3 m 1 1 6
#4 p 1 1 3
#5 r 1 1 9
#6 S 1 1 1
#7 t 1 1 4
text <- "September"