R-如何从数据帧中的单个列和行获取字符串

R-如何从数据帧中的单个列和行获取字符串,r,R,所以我试着用R来学习它 但我坚持只计算字符串中字符的频率。我甚至无法通过加载数据和获取字符串:-( 如何打印此文本文件中字符串的第一个字符 以下是我迄今为止所尝试的: > rosalind_dna <- read.table("~/Downloads/rosalind_dna.txt", quote="") Warning message: In read.table("~/Downloads/rosalind_dna.txt", quote = "") : incomplete

所以我试着用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
>rosalind_dna视图数据(rosalind_dna)
>str(rosalind_dna[1,1,1])
系数w/1级“GGCCCGGTTACTGCGACTGAACATCAATCAAGCAACCAATTGAATCGACTTACGAGATACCAGATATATCAAGGTGCTACTGAGCGTGGTCCCTGGACAAGGC”|截断的| 1

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

s = readLines("Your file.txt",n=1)
substr(s, 1, 1)
要显示每行的第一个字符,请执行以下操作:

s = readLines("Your file.txt")
substr(s, 1, 1)
n = 5
s = readLines("Your file.txt")
substr(s, n, n)
要显示每行的第n个字符:

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

到目前为止你所做的一切都很好

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 
> 
>dat str(dat)
“data.frame”:1个变量的1个对象:
$V1:系数w/1级“abcdfjtusje”:1
>x 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”
>表(strsplit(x,“”[[1]]))
a b c d e f j s t u
1 1 1 1 1 1 2 1 1 1 
> 

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

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

s = readLines("/tmp/string.txt")
变量
s
只是一个字符串。要拆分基数,我们使用:

strsplit(s, "")
然后使用
表格
制表:

table(strsplit(s, ""))

您可以使用readLine和substr命令来解决这个问题,但是如果您坚持从datafram中grep第一个字符,那么简单地说,您可以使用
substr(数据帧$colname,1,1)

它将返回一个字符串向量。

您的URL正在出现服务器错误!您只想显示整个文件的第一个字符还是任何一行的第一个字符?我认为该站点已关闭。希望它很快就会恢复。最终,我想通过文件中的字符循环并获得频率。我不知道如何才能获得这些字符当你试图读取第一个字符时,你并不认为你的文件是一个表,所以这更方便approach@Greg你所采取的方法没有问题。你只需要再多走1-2步,仅此而已。这是品味的问题。有些人更喜欢
@Roland No它不依赖于从右到左的右转,在某些情况下,当我写下所有参数后,记得将函数的值赋给变量时,我使用以下方向:-)@SvenHohenstein很好,谢谢。在我的辩护中,我试图向一个新来者明确说明一个事实,
strsplit
将返回一个列表,它有时会让人绊倒。哇,这太容易了。我想我不应该在R里这么循序渐进地思考。不过我不明白[[1]]是干什么的。table不需要对整个列表进行操作吗?@Greg正如Sven指出的那样,
table(strsplit(x,”)
在这种情况下可以正常工作。我试图明确说明
strsplit
是矢量化的:
strsplit(c(“abc”、“def”),”)
返回长度为2的列表。在我们简化的例子中,我们有一个长度为1的列表,所以这并不重要。如果在
read.table
中使用
scan
table(strsplit(scan(file=“~/Downloads/rosalind_dna.txt”,what=character(),”)