R-如何从数据帧中的单个列和行获取字符串
所以我试着用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
> 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(),”)