将列从列表转换为因子或字符

时间:2018-10-17 16:41:00

标签: r string

我有需要比较的地址。多亏了此站点上的一个有用答案,我有90%的方法可以到达那里,但是我需要最后的10%。

我有下面的代码来生成用于比较的地址。我需要查看addr1addr2之间是否有任何区别。

eg_data <- data.frame(addr1 = c('123 Main St','742 Evergreen 
Ter','8435 Roanoke Dr','1340 N State Pkwy') , addr2 = c('123 
Main St Apt 4','742 Evergreen Terrace','8435 Roanoke Dr Unit 
5','1340 N State Pkwy'), stringsAsFactors = FALSE)

下一部分非常有用,它将vecsets子功能vsetdiffstrsplit组合在一起,以比较两者并提取任何差异

eg_data$addr_comp2_1 <- mapply(vsetdiff, strsplit(eg_data$addr2, 
split=""), strsplit(eg_data$addr1, split=""))

运行代码,看看,但剩下的是像{​​{1}}这样的格式,其中b / t是row1地址的差异,它是列表形式的。我需要此列是字符串或因子的单独行。在数据视图中,我需要查看c(" ","A","p","t"," ","4")而不是"addr_comp2_1 : chr "123...":清单4,以便数据框本身在col3 / row1中给我“ Apt 4”,而不是addr_comp2_1

我尝试过

c(" ","A","p","t"," ","4")

这些显然不起作用。 eg_data$fix <- paste(eg_data$addr_comp2_1, collapse=', ') eg_data$fix2 <- str_c(eg_data$addr_comp2_1, collapse=',') eg_data$fix3 <- as.factor(eg_data$addr_comp2_1) eg_data$fix4 <- lapply(eg_data$addr_comp2_1, unlist) eg_data$fix5 <- (matrix(unlist(eg_data$addr_comp2_1), nrow=4, byrow=F)) eg_data$fix6 <- unlist(eg_data$addr_comp2_1, use.names=FALSE, recursive=FALSE) 是接近的,但是它给每个单独的字符自己的行,而不是fix5的分组,所以我最终得到17行,而不是添加四列。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您只需要串联结果。 # this module will be useful import math # your point to move point = [x, y] # use your slope and intercept m = slope b = intercept # get two points from the line x1, y1 = 0, b x2 = 1 y2 = m*x2+b # get line in vector form line = [x2-x1, y2-y1] # normalize norm = math.hypot(line[0], line[1]) norm_line = [line[0]/norm, line[1]/norm] # project point onto norm_line comp = (norm_line[0]*point[0]+norm_line[1]*point[1]) proj = [norm_line[0]*comp, norm_line[1]*comp] # this should be your new point new_point = [proj[0]+x1, proj[1]+y1] 函数将为您完成此任务。

代码

lapply

输出

enter image description here