Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据位置从长度不同的字符串中提取字符?_R - Fatal编程技术网

R 如何根据位置从长度不同的字符串中提取字符?

R 如何根据位置从长度不同的字符串中提取字符?,r,R,我想弄清楚这件事,我快秃顶了。我试图从基于位置的不同长度的字符串中提取字符。例如,假设我有一个数据框,有8行1列,标题为:“时间” 该列在每行中具有以下值: TIME 5 20 100 105 150 1050 2005 2010 我试图找出如何提取这些字符串中的字符,并根据位置将其转换为以下格式。如果查看,您可以看到最后两个字符被放置在00:here:00,而所有其他字符被放置在here:00:00。结果应该是: 5->00:05:00(如果只有1个字符) 20->00:20:00(如

我想弄清楚这件事,我快秃顶了。我试图从基于位置的不同长度的字符串中提取字符。例如,假设我有一个数据框,有8行1列,标题为:“时间” 该列在每行中具有以下值:

TIME
5  
20 
100
105
150
1050
2005
2010
我试图找出如何提取这些字符串中的字符,并根据位置将其转换为以下格式。如果查看,您可以看到最后两个字符被放置在00:here:00,而所有其他字符被放置在here:00:00。结果应该是:

5->00:05:00(如果只有1个字符)
20->00:20:00(如果有两个字符)
100->1:00:00(如果有3个字符)
105->1:05:00(如果有3个字符)
150->1:50:00(如果有3个字符)
1050->10:50:00(如果有4个字符)
2005->20:05:00(如果有4个字符)
2010->20:10:00(如果有4个字符)

从本质上讲,伪代码是与
从dataframe$column1中提取最后两个字符,并将其放置在00:here:00中-所有剩余字符都应放置在here:00:00中。这种方法如何

time <- readLines(n = 8)
5
20
100
105
150
1050
2005
2010
sub("(\\d{2})(\\d{2})", "\\1:\\2:00", sprintf("%04d", as.numeric(time)))
# [1] "00:05:00" "00:20:00" "01:00:00" "01:05:00" "01:50:00" "10:50:00" "20:05:00" "20:10:00"
time这个怎么样:

library(stringr)
TIME <- c('5','20','100','105','150','1050','2005','2010')
TIMEpadded <- paste0(str_pad(TIME, width=4, pad=0), '00')
sub('(.+)(.{2})(.{2})', '\\1:\\2:\\3', TIMEpadded)
## [1] "00:05:00" "00:20:00" "01:00:00" "01:05:00" "01:50:00" "10:50:00" "20:05:00" "20:10:00"
库(stringr)
时间
公共静态字符串转换(字符串输入)
{
while(in.length()<4)
{
in=“0”+in;
}
in=in.子串(0,2)+“:“+in.子串(2,4)+”:00”;
返回(in);
}
公共静态void main(字符串[]args)
{
对于(字符串s:新字符串[]{“5”、“20”、“100”、“105”、“150”、“1050”、“2005”、“2010”})
{
System.out.println(s+“->”+转换);
}
}
方法转换: 1) 将零添加到中字符串中的时间值,直到获得4位字符串。 2) 在字符串中插入“:”和尾随的“00”

main方法运行您提供的示例, 具有以下输出:

5 -> 00:05:00
20 -> 00:20:00
100 -> 01:00:00
105 -> 01:05:00
150 -> 01:50:00
1050 -> 10:50:00
2005 -> 20:05:00
2010 -> 20:10:00

sprintf
用前导0填充时间变量的字符值。
as.POSIXct
读取时间作为该时间的当前日期,然后外部的
格式.POSIXt
函数删除日期字符。

您不需要
stringr
,您可以执行
paste0(sprintf(“%04d”,df$time),“00”)
sprintf(“%04d00”,df$time)
偶数(或
as.integer(df$TIME)
如果需要的话),不需要粘贴
是的,这是一种更好的语言。而且,所需的输出只是为了说明,他们不会试图打印箭头。谢谢-这正是我需要的。代码简单易读且准确。
format( as.POSIXct(sprintf("%04.0f", TIME), format="%H%M"), format="%H:%M:%S")
[1] "00:05:00" "00:20:00" "01:00:00" "01:05:00"
[5] "01:50:00" "10:50:00" "20:05:00" "20:10:00"