I am trying to replace values found in one column of a dataframe based upon finding a match in another dataframe using mutate(). Here is an example:
rename_ds <- data.frame(
car_name = c("Camaro Z28","AMC Javelin"),
replace_with = c("Camaro","Javelin"),
stringsAsFactors = FALSE)
mt_cars <- mtcars %>%
tibble::rownames_to_column() %>%
dplyr::rename("car_name" = rowname) %>%
dplyr::mutate(car_name = ifelse(car_name %in% rename_ds$car_name,
rename_ds[which(rename_ds$car_name == car_name),2],
car_name)
When I run this, instead of the car names being replaced by their respective replacements in rename_ds$replace_with, they are NA.
21 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
23 <NA> 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
24 <NA> 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
25 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
26 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
27 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Any suggestions? Thanks in advance.
We could make it simpler with a named vector and coalesce:
library(dplyr)
mtcars %>%
tibble::rownames_to_column("car_name") %>%
mutate(car_name = coalesce(set_names(rename_ds$replace_with,
rename_ds$car_name)[car_name], car_name))
# car_name mpg cyl disp hp drat wt qsec vs am gear carb
#1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
#2 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
#3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
#4 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
#5 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
#6 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
#7 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
#8 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
#9 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
#10 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
#11 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
#12 Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
#13 Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
#14 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
#15 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
#16 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
#17 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
#18 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
#19 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
#20 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
#21 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
#22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
#23 Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
#24 Camaro 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
#25 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
#26 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
#27 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
#28 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
#29 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
#30 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
#31 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
#32 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
In base R, we could do
pmax(row.names(mtcars), setNames(rename_ds$replace_with,
rename_ds$car_name)[row.names(mtcars)], na.rm = TRUE)
To me this looks more like a join operation:
mtcars %>%
tibble::rownames_to_column() %>%
dplyr::rename("car_name" = rowname) %>%
left_join(rename_ds, by = "car_name") %>%
mutate(car_name = coalesce(replace_with, car_name)) %>%
select(-replace_with)
# car_name mpg cyl disp hp drat wt qsec vs am gear carb
# 1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
# 2 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
# 3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
# 4 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
# 5 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
# 6 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
# 7 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
# 8 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
# 9 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
# 10 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
# 11 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
# 12 Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
# 13 Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
# 14 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
# 15 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
# 16 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
# 17 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
# 18 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
# 19 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
# 20 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
# 21 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
# 22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
# 23 Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
# 24 Camaro 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
# 25 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
# 26 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
# 27 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
# 28 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
# 29 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
# 30 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
# 31 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
# 32 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
(Rows 23-24 are updated.)
You are on the right track, you can use str_replace_all
mtcars %>%
tibble::rownames_to_column() %>%
dplyr::rename("car_name" = rowname) %>%
dplyr::mutate(car_name = str_replace_all(car_name,
exec(str_c,collapse="|",rename_ds$car_name),
exec(setNames,!!!unname(rev(rename_ds)))))
car_name mpg cyl disp hp drat wt qsec vs am gear carb
1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
4 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
5 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
6 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
7 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
8 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
9 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
10 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
11 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
12 Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
13 Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
14 Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
15 Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
16 Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
17 Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
18 Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
19 Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
20 Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
21 Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
22 Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
23 Camaro 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 # Changed
24 Javelin 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 # Changed
25 Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
26 Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
27 Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
28 Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
29 Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
30 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
31 Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
32 Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Related
I was wondering if there might be a way to specify the name of a new variable used in mutate() (argument mutate_nm = "bb") inside the foo() function below?
library(tidyverse)
foo <- function(data = mtcars, mutate_nm, val = 12){
mutate(mutate_nm = val)
}
#==== EXAMPLE OF USE:
foo(mutate_nm = "bb") Doesn't produce a dataframe with a new column named `"bb"`
We need to use := with !! or {{}}. Also, mutate by itself doesn't create any column i.e. need the data argument as well
foo <- function(data = mtcars, mutate_nm, val = 12){
data %>%
mutate({{mutate_nm}} := val)
#or use
#mutate(!! mutate_nm := val)
}
-testing
> foo(mtcars, "bb")
mpg cyl disp hp drat wt qsec vs am gear carb bb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 12
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 12
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 12
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 12
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 12
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 12
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 12
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 12
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 12
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 12
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 12
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 12
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 12
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 12
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 12
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 12
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 12
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 12
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 12
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 12
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 12
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 12
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 12
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 12
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 12
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 12
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 12
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 12
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 12
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 12
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 12
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 12
I want to subset a list based on elements of one element of a sublist
inner_list1 <- list(dt=iris,ver='v2')
inner_list2 <- list(dt=mtcars,ver='v1')
outer_list <- list(a=inner_list1,b=inner_list2)
In outer_list I want to keep the elements for which inner_list*[['ver']]=='v1'. HOw can I do that?
I would do something like
outer_list[lapply(outer_list, '[[',"ver")=='v1']
#returns
$b
$b$dt
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
$b$ver
[1] "v1"
I want to create a list of dataframes with same name pattern.
dataframes: dF1, dF2, dF3, ... (don't know how many I would get)
How can I create a list of dataframes that start with dF? Especially, without having to find the total number of dataframes starting with dF.
Assuming that all your data.frames are in your global environment you can use mget:
#example data sets
#we only want to have dF1 and dF2 in the list
dF1 <- mtcars
dF2 <- mtcars
pd3 <- mtcars
#ls(globalenv()) will return a character vector of all the objects
#filtered by a pattern
mget(ls(globalenv(), pattern = '^dF'))
Output:
mget(ls(globalenv(), pattern = '^dF'))
$dF1
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
$dF2
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
The scan() function can be used to copy/paste a vector into R. Is it possible to copy/paste a data.frame into R using scan(). For example, how could I copy the dataframe below and paste it into R using scan()?
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
I use pipe i.e.,
pcon <- pipe("pbpaste")
df <- read.table(pcon, , header = T)
dput(df)
This question already has answers here:
Applying by function to lm()
(3 answers)
Closed 7 years ago.
I've got the following table and I'd love to get a data frame with the lm slopes for each industry. Years are 1999 - 2012 for each industry and I'm simply looking for the slope of each industry in a new table.
> head(mmfpdatad)
YEAR industry index
1 1999 Farms -0.02352551
2 2000 Farms 0.04081992
3 2001 Farms 0.02435490
4 2002 Farms 0.01056180
5 2003 Farms 0.04876939
6 2004 Farms -0.01805118
Using mtcars as example data, you could try:
mtcars$slope <- ave(mtcars$mpg, as.factor(mtcars$gear), FUN = function(x) lm(x ~ seq_along(x))$coef[[2]])
Which gives you slope per gear:
mtcars
mpg cyl disp hp drat wt qsec vs am gear carb slope
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 0.6860140
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 0.6860140
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 0.6860140
Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 -0.1864286
Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 -0.1864286
Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 -0.1864286
Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 -0.1864286
Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 0.6860140
Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 0.6860140
Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 0.6860140
Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 0.6860140
Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 -0.1864286
Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 -0.1864286
Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 -0.1864286
Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 -0.1864286
Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 -0.1864286
Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 -0.1864286
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 0.6860140
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 0.6860140
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 0.6860140
Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 -0.1864286
Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 -0.1864286
AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 -0.1864286
Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 -0.1864286
Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 -0.1864286
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 0.6860140
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 -3.2700000
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 -3.2700000
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 -3.2700000
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 -3.2700000
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 -3.2700000
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 0.6860140