奋斗的新手在这里,请原谅不优雅的解释,让我知道我需要澄清。
我有一个像这样的对象,一个字符串向量:
“aaaa,1,1,1,1,0”
abba,0,0,1,1
“bbaa,1,0,0,0,1”
我想把四个字母的标签拆分成一个字符向量,剩下的部分我想重构成数字,这样我就得到了一个像这样的 Dataframe ,3个obs,6个变量,标签是字符,数字是数字:
aaaa 1 1 1 0
阿爸0 0 1 1
bbaa 1 0 0 1
然后我想给它加上“列标签”,最后得到
电话:021 - 88888888
aaaa 1 1 1 0
阿爸0 0 1 1
bbaa 1 0 0 1
我还想要一匹小马
我觉得我有零碎的东西……我可以分裂出四个字母标签使用substr(data,1,4)
这样就得到了一个向量
“aaaa”“abba”“bbaa”
但是我不知道该用什么来得到字符串的其余部分,数字部分,作为一个向量。substr(data,5,last)
不起作用,我不喜欢说substr(data,5,14)
,因为尽管我在这里举了个例子,但字符串并不总是14个字符长。是否有方法指定substr(data,5,"to the end of the string?")
然后,为了将字符串转换为数字,我尝试as.integer(unlist(strsplit(data,",")))
在原始文件上,我得到了一个带有1和0的长向量,但其中的标签,“aaba”被替换为NA。
我被困在试图把所有的碎片拼在一起。
[Why你可能会问,我的数字和标签是不是一开始就混在一个字符串里了?因为我想用“1,1,1”替换所有“1,0,1”的示例,并使用paste()
将数字转换为字符串,并在字符串上使用gsub()
来实现替换,这是我唯一能做到的。
5条答案
按热度按时间elcex8rz1#
你走上了正确的道路。我不得不添加更多的步骤,但我得到了以下工作:
ulmd4ohb2#
两种选择:
1.在base R中,运行
substr(data, 5, length(data))
。1.如果您愿意使用其他软件包,请尝试
stringr
。然后,您可以使用-1来指示向量的结束。试试stringr::str_sub(data, 5, -1)
mftmpeh83#
我认为BigFinger的答案执行了几乎所有期望的功能,但为了更改列名,您可以添加
names(df) <- c("NAME",1,2,3,4,5)
。gmxoilav4#
以下是
tidyverse
解决方案:mum43rcc5#
您的向量形成一个逗号分隔的文件,因此只需使用
read.csv
。您可以将名称添加为第一个字符串并使用
header=TRUE
。1
、2
等不是很好的列名,R会尝试修复它们,但如果你确定你想要它们,使用check.names=FALSE
来保持它们的原样。