我在表单的某些文本中有一个字符串"12,34,77",包括引号.
我需要将每个数字的值放入列表中.我尝试使用lapply和strsplit:
control2=lapply(strsplit(data$values,","),as.numeric)
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
非角色论证
我究竟做错了什么?
您好我正在尝试将大数据文件读入R.它是一个制表符分隔文件,但前两列填充了由"|"分隔的多个数据.该文件看起来像:
A|1 B|2 0.5 0.4
C|3 D|4 0.9 1
Run Code Online (Sandbox Code Playgroud)
我只关心第一列和第二列以及第三和第四列中的第一个值.最后,我希望最终得到每个行的向量,如下所示:
A B 0.5 0.4
Run Code Online (Sandbox Code Playgroud)
我正在使用连接来读取文件:
con <- file("inputfile.txt", open = "r")
lines <- readLines(con)
Run Code Online (Sandbox Code Playgroud)
这给了我:
lines[1]
[1] "A|1\tB|2/t0.5\t0.4"
Run Code Online (Sandbox Code Playgroud)
然后我使用strsplit分割制表符分隔文件:
linessplit <- strsplit(lines, split="\t")
Run Code Online (Sandbox Code Playgroud)
这给了我:
linessplit[1]
[1] "A|1" "B|2"
[3] "0.5" "0.4"
Run Code Online (Sandbox Code Playgroud)
当我尝试以下操作将"A | 1"拆分为"A""1"时:
line1 <- linessplit[1]
l1 <- strsplit(line1[1], split = "|")
Run Code Online (Sandbox Code Playgroud)
我明白了:
"Error in strsplit(line1[1], split = "|") : non-character argument"
Run Code Online (Sandbox Code Playgroud)
有没有人有办法解决这个问题?谢谢!
关于问题 :
我有一个字符串向量foo:
>foo = c("1x2","3x4","5x6","7x8","9x10")
Run Code Online (Sandbox Code Playgroud)
我将单个字符串拆分为"x"并将结果粘贴到goo中:
>goo = strsplit(foo, "x")
>goo
[[1]]
[1] "1" "2"
[[2]]
[1] "3" "4"
[[3]]
[1] "5" "6"
[[4]]
[1] "7" "8"
[[5]]
[1] "9" "10"
Run Code Online (Sandbox Code Playgroud)
如何从此列表中提取第一个和第二个"列"?(我想要(1,3,5,7,9)和(2,4,6,8,10))
假设我在 R 中使用list.files()获得了下一个向量:
paths <- c("/home/user/myfolder/ERA/amsterdam/amsterdam1.nc", "/home/user/myfolder/ERA/amsterdam/amsterdam2.nc",
"/home/user/myfolder/CLMcom/HadCruz/run1/paris/paris1.nc", "/home/user/myfolder/CLMcom/HadCruz/run1/paris/paris2.nc",
"/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki/helsinki1.nc")
nchar(paths)
[1] 47 47 55 55 63
Run Code Online (Sandbox Code Playgroud)
如您所见,矢量路径确实具有不同大小的对象。
我想从路径中获取包含所有对象但没有内部文件名的新向量,例如:
> new_paths
[1] "/home/user/myfolder/ERA/amsterdam/"
"/home/user/myfolder/ERA/amsterdam/"
[3] "/home/user/myfolder/CLMcom/HadCruz/run1/paris/"
"/home/user/myfolder/CLMcom/HadCruz/run1/paris/"
[5] "/home/user/myfolder/CNRM/CLMcom/rcp85/run1/helsinki/"
Run Code Online (Sandbox Code Playgroud)
我需要这个,因为我想创建一个循环,其中对于向量 new_paths中的每个i,我将使用system运行一个终端命令
我知道strsplit有可能,但是,我不是在 R 中操作文件名的专家。有人知道这种可能性吗?
我有一个像这样的巨大数据集:
customer_id customer_math
15251 10001010
10101 11111111
84787 10101010
Run Code Online (Sandbox Code Playgroud)
我想在每个字符处拆分 customer_math 以接收如下所示的 df:
customer_id 2012 2013 2014 2015 2016 2017 2018 2019
15251 1 0 0 0 1 0 1 0
10101 1 1 1 1 1 1 1 1
84787 1 0 1 0 1 0 1 0
Run Code Online (Sandbox Code Playgroud)
我尝试过但失败了。
你能帮我解决这个问题吗?
非常感谢您的支持!
我以以下data.table为例
df = data.table(id = c(1, 2, 3), val=c("['hello', 'world']", "['hi']", "['so', 'there']"))
Run Code Online (Sandbox Code Playgroud)
我想将像对象一样的列表拆分为id重复的单独行。所以data.table我想要的预期如下
df2 = data.table(id = c(1, 1, 2, 3, 3), val=c("hello", "world", "hi", "so", "there"))
Run Code Online (Sandbox Code Playgroud)
我尝试了以下
df[, c("test") := tstrsplit(val, ",", fixed=TRUE)]
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误
误差在
[.data.table(DF,:=(C( “测试”),tstrsplit(VAL, “”,固定= TRUE))):提供的2项被分配给3个项目栏'测试'的。如果您希望“回收” RHS,请使用 rep() 向您的代码读者明确说明这一意图。
有人可以指出我在这里做错了什么吗?提前致谢。
我想结合 R 的 rev() 函数和 strsplit 函数来检查字符串是否是回文。我的想法是使用 strsplit() 将字符串分割成单个字母,然后对结果使用 rev 来反转字母的顺序。那么,说:
a = "summer"
Run Code Online (Sandbox Code Playgroud)
我们这样做:
b = strsplit(a,"")
Run Code Online (Sandbox Code Playgroud)
我们得到:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
Run Code Online (Sandbox Code Playgroud)
看起来应该可以。但对此使用 rev :
rev(b)
Run Code Online (Sandbox Code Playgroud)
并且输出不会改变:
[[1]]
[1] "s" "u" "m" "m" "e" "r"
Run Code Online (Sandbox Code Playgroud)
现在,我已经缩小了答案,使其与“[[1]]”有关,我将其视为列表符号。如果我们这样做:
c = strsplit(a,"")[[1]]
我们得到:
[1]“s”“u”“m”“m”“e”“r”
即没有“[[1]]”。现在,如果我们在这里使用 rev(c),我们会得到所需的结果:
[1] "r" "e" "m" "m" "u" "s"
Run Code Online (Sandbox Code Playgroud)
同样,如果我们有:
d = 1:10
Run Code Online (Sandbox Code Playgroud)
并使用 rev(d),我们得到:
[1] 10 9 8 7 6 5 4 3 2 1
Run Code Online (Sandbox Code Playgroud)
这两次成功尝试的共同点是缺乏列表符号。有人能告诉我 R 如何处理我们的初始字符串以及为什么使用带有 strsplit 的列表表示法可以让我们正确使用 rev 吗?
我的数据如下所示:
duration obs another
1 1.801760 ID: 10 DAY: 6/10/13 S orange
2 1.868500 ID: 10 DAY: 6/10/13 S green
3 0.233562 ID: 10 DAY: 6/10/13 S yellow
4 5.538760 ID:96 DAY: 6/8/13 T yellow
5 3.436700 ID:96 DAY: 6/8/13 T blue
6 0.533856 ID:96 DAY: 6/8/13 T pink
7 2.302250 ID:96 DAY: 6/8/13 T orange
8 2.779420 ID:96 DAY: 6/8/13 T green
Run Code Online (Sandbox Code Playgroud)
我只包含了3个变量,但实际上我的数据有很多.我的问题是看丑陋的"obs"变量.我从另一个人那里收到了这些数据,这些人不一致地将这些信息输入到他们正在使用的软件中.
'obs'包含三条信息: - id(ID:10,ID:96等) - 日期(M/D/Y) - 标识符(S或T)
我想分割这些信息并提取ID号(10或96),日期(例如6/8/13)和标识符(S或T).
为此,我尝试使用strsplit进行以下操作:
temp<-strsplit(as.character(df$obs), " ")
mat<-matrix(unlist(temp), ncol=5, byrow=TRUE)
Run Code Online (Sandbox Code Playgroud)
我认为这可以像我的实际数据那样工作,我有130,000个观察结果,我没有意识到某些观察结果存在id在"ID:"和数字之间没有空格的问题.例如,在上面的数据中,"ID:96"在冒号和数字之间没有空格.显然,我收到了这条警告信息: …
我有一个列,其中包含转化率的估算数字;
Type Conversion
A 90
B 84
C 85-90
D 60-70
Run Code Online (Sandbox Code Playgroud)
问题是,如果转换是在一个范围内给出的,我需要创建一个新的列,它取中间点.所以这样的事情;
Type Conversion
A 90
B 84
C 87.5
D 65
Run Code Online (Sandbox Code Playgroud)
我怎么能在R中这样做?
假装我有一个向量:
testVector <- c("I have 10 cars", "6 cars", "You have 4 cars", "15 cars")
Run Code Online (Sandbox Code Playgroud)
有没有办法解析这个向量,所以我只能存储数值:
10, 6, 4, 15
Run Code Online (Sandbox Code Playgroud)
如果问题只是"15路车"和"6辆",我知道如何解析,但我有与具有文本在太前面琴弦难度!任何帮助是极大的赞赏.
r ×10
strsplit ×10
string ×2
character ×1
data.table ×1
gsub ×1
list ×1
palindrome ×1
substring ×1