2

所以我试图在 R 中解决这些问题以便学习它。

但是我被困在第一个问题上,即简单地计算字符串中字符的频率。我什至无法超越加载数据并获取字符串:-(

我该如何做一些事情,比如从这个文本文件中打印字符串的第一个字符?

这是我到目前为止所尝试的:

> rosalind_dna <- read.table("~/Downloads/rosalind_dna.txt", quote="")
Warning message:
In read.table("~/Downloads/rosalind_dna.txt", quote = "") :
  incomplete final line found by readTableHeader on '~/Downloads/rosalind_dna.txt'
>   viewData(rosalind_dna)
> str(rosalind_dna[1,1,1])
 Factor w/ 1 level "GGCCCGGTTACTGCGACTGAACAATCAAAATCTGAAGCATTTAAGCCAAACCAATTGAGATCGACTTACGAGCGATAACCCAGTATATTCAAGTGCTACTGATGAGGCGTGGTCCCCTGGACAAGGC"| __truncated__: 1
4

4 回答 4

2

到目前为止,您所做的一切都很好。

read.table返回一个数据框。在这种情况下,您只会得到一个包含单列且该列中只有一个值的数据框。

默认情况下,R 会将数据框中的字符列转换为因子。您可以使用as.character.

然后,您只需将该单个字符串拆分为单个字符 ( strsplit),然后制作一个表格 ( table)。(不需要循环!)

这是一个玩具示例,说明了我提到的所有功能:

> dat <- data.frame(V1 = factor("abcdfjtusje"))
> str(dat)
'data.frame':   1 obs. of  1 variable:
 $ V1: Factor w/ 1 level "abcdfjtusje": 1
> x <- as.character(dat[1,1])
> x
[1] "abcdfjtusje"
> strsplit(x,"")
[[1]]
 [1] "a" "b" "c" "d" "f" "j" "t" "u" "s" "j" "e"

> strsplit(x,"")[[1]]
 [1] "a" "b" "c" "d" "f" "j" "t" "u" "s" "j" "e"
> table(strsplit(x,"")[[1]])

a b c d e f j s t u 
1 1 1 1 1 1 2 1 1 1 
> 
于 2012-11-09T15:32:38.470 回答
2

我已将链接中的文件复制/tmp/string.txt到此文件中只有一行:

AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC

readLines我们可以使用以下命令读取文件:

s = readLines("/tmp/string.txt")

该变量s只是一个字符串。为了拆分基础,我们使用:

strsplit(s, "")

然后使用table

table(strsplit(s, ""))
于 2012-11-09T16:03:38.870 回答
1

如果要显示整个文件的第一个字符,可以执行以下操作:

s = readLines("Your file.txt",n=1)
substr(s, 1, 1)

要显示每行的第一个字符:

s = readLines("Your file.txt")
substr(s, 1, 1)

要显示每行的第 n 个字符:

n = 5
s = readLines("Your file.txt")
substr(s, n, n)
于 2012-11-09T15:24:39.557 回答
0

你可以使用 readLine 和 substr 命令来解决这个问题,但是如果你坚持从数据帧中 grep 的第一个字符,你可以简单地使用 substr(dataframe$colname,1,1) 它将返回一个字符串向量。

于 2021-03-03T14:54:09.073 回答