我有一个数据帧
nlmem3coef = data.frame(b0 = c(-1.453651,-1.423549,-1.497282,-1.398282,-1.453145,-1.387556,-1.415699,-1.430086), CompPlot = c("1/5/1","1/5/2","1/5/3","1/5/10","1/10/1", "1/10/2", "1/10/3", "1/10/10"))
在标题为" CompPlot"的第二列中,我只对斜杠和第二个斜杠之间的数字感兴趣。因此,我想将第二列中的值设为:
`c("5.1", "5.2", "5.3", "5.10", "10.1", "10.2", "10.3", "10.10")`
那么,有没有办法在CompPlot列中获取现有值并仅使用其中的一部分并在数字之间添加句点。其次,考虑到我在斜杠之间和斜杠之后有一个整数值,这段代码是否可以灵活地从原始数据中获得5.1和5.10以及10.1和10.10?
谢谢!
答案 0 :(得分:1)
您可以使用sub()
。
sub(".*/(.+)/(.+)", "\\1.\\2", nlmem3coef$CompPlot)
# [1] "5.1" "5.2" "5.3" "5.10" "10.1" "10.2" "10.3" "10.10"
正则表达式解释:
.*/
- 删除第一个正斜杠之前的所有内容(.+)
- 存储多个出现的任何字符/
- 匹配文字正斜杠(.+)
- 存储多个出现的任何字符替换\\1.\\2
获取第一个存储集.+
和第二个存储集.+
,并在它们之间放置.
个字符。
答案 1 :(得分:0)
您可以使用IList<StudentViewmodel> students = null;
using (var CTX = new StudentEntities())
{
students = CTX.Students.Include("JP").Select(
s => new StudentViewmodel()
{
Id = s.StudentId,
FirstName = s.FirstName,
LastName = s.LastName,
address = new AddressViewmodel()
{
// Address1 = s.StudentAddresses.Select(t => t.Address1).ToString()
Address1 = s.StudentAddresses.OfType<AddressViewmodel>().FirstOrDefault().Address1.ToString()
}
}
).ToList<StudentViewmodel>();
}
并捕获相关群组:
gsub
或使用gsub("\\d+/(\\d+)/(\\d+)", "\\1.\\2", nlmem3coef$CompPlot);
[1] "5.1" "5.2" "5.3" "5.10" "10.1" "10.2" "10.3" "10.10"
:
strsplit
sapply(strsplit(as.character(nlmem3coef$CompPlot), "/"), function(x)
paste(x[2], x[3], sep = "."));
[1] "5.1" "5.2" "5.3" "5.10" "10.1" "10.2" "10.3" "10.10"